0.1+0.2不等于0.3,微信小程序云开发如何解决JavaScript小数计算精度失准的问题
先看图
这个是JavaScript语言自身存在的一个问题。说道这里不得不提一下网上流传的JavaScript搞笑图
我们在使用云开发来开发微信小程序的时候,会经常遇到JavaScript小数计算精度失准的问题。特别是实现钱包计算的功能。虽然整数计算不会出错,但总不能要求微信小程序内都是整数计算吧,这不科学。
那么开发小程序涉及到小数计算的时候,如何防止小数计算精度失准。
其实有很多方法,这里主要推荐我觉得比较好的解决办法。就是使用math.js这个npm包来实现计算。
废话少说,直接上代码!!!
建一个calculation云函数,代码如下:
// 云函数入口文件
const cloud = require('wx-server-sdk')
const TcbRouter = require('tcb-router'); //云函数路由
const math = require('mathjs'); //云函数路由
cloud.init({
env:'' //填入你的环境ID
})
// 云函数入口函数
exports.main = async (event, context) => {
const app = new TcbRouter({
event
});
//乘法
app.router('multiply', async(ctx) => {
var value = math.multiply(math.bignumber(event.num1), math.bignumber(event.num2))
ctx.body = math.round(value,2) //四舍五入,并且保留2位小数
});
//除法
app.router('divide', async(ctx) => {
var value = math.divide(math.bignumber(event.num1), math.bignumber(event.num2))
ctx.body = math.round(value,2) //四舍五入,并且保留2位小数
});
//加法
app.router('sum', async(ctx) => {
var value = math.add(math.bignumber(event.num1), math.bignumber(event.num2))
ctx.body = math.round(value,2) //四舍五入,并且保留2位小数
});
//减法
app.router('subtract', async(ctx) => {
var value = math.subtract(math.bignumber(event.num1), math.bignumber(event.num2))
ctx.body = math.round(value,2) //四舍五入,并且保留2位小数
});
return app.serve();
}
写完云函数的代码了,记得安装math.js计算库和tcb-router云函数路由的依赖包。
安装依赖包步骤,右击名为calculation云函数文件夹,再点击“在外部终端窗口中打开”,然后输入依次输入命令:npm install mathjs和npm install tcb-router。安装成功后,点击“上传并部署:云端安装依赖(不上传node_modules)”即可部署完成云函数。
前端请求代码如下:
wx.cloud.callFunction({
name: 'calculation',
data: {
$url: "multiply", //云函数路由参数,示例参数是乘法
num1:that.data.price,
num2:that.data.rate,
},
success: res => {
console.log(res.result.value) //计算结果
},
fail(e) {
console.log(e)
}
});
$url这个是填土云函数路由参数的,上面代码的是表示乘法,如果想让云函数计算加法,我们可以传入“add”作为参数即可。
这里我们使用了云函数路由,这样我们可以把加减乘除的算法都合并到一个云函数里,节俭很多代码
end
0.1+0.2不等于0.3,微信小程序云开发如何解决JavaScript小数计算精度失准的问题的更多相关文章
- 微信小程序云开发-从0打造云音乐全栈小程序
第1章 首门小程序“云开发”课程,你值得学习本章主要介绍什么是小程序云开发以及学习云开发的重要性,并介绍项目的整体架构,真机演示项目功能,详细介绍整体课程安排.课程适用人群以及需要掌握的前置知识.通过 ...
- 从0到1构建适配不同端(微信小程序、H5、React-Native 等)的taro + dva应用
从0到1构建适配不同端(微信小程序.H5.React-Native 等)的taro + dva应用 写在前面 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种 ...
- 微信小程序0.11.122100版本新功能解析
微信小程序0.11.122100版本新功能解析 新版本就不再吐槽了,整的自己跟个愤青似的.人老了,喷不动了,把机会留给年轻人吧.下午随着新版本开放,微信居然破天荒的开放了开发者论坛.我很是担心官方 ...
- 微信小程序(原名微信应用号)开发工具0.9版安装教程
微信小程序全称微信公众平台·小程序,原名微信公众平台·应用号(简称微信应用号) 声明 微信小程序开发工具类似于一个轻量级的IDE集成开发环境,目前仅开放给了少部分受微信官方邀请的人士(据说仅200个名 ...
- iKcamp出品|微信小程序|工具安装+目录说明|基于最新版1.0开发者工具初中级教程分享
iKcamp官网:http://www.ikcamp.com 访问官网更快阅读全部免费分享课程:<iKcamp出品|全网最新|微信小程序|基于最新版1.0开发者工具之初中级培训教程分享>. ...
- Fundebug微信小程序错误监控插件更新至1.1.0,新增test()与notifyHttpError()方法
摘要: 1.1.0新增fundebug.test()和fundebug.notifyHttpError()方法,同时大小压缩至15K. Fundebug是专业的小程序BUG监控服务,可以第一时间为您捕 ...
- WordPress版微信小程序3.0版发布
距离WordPress版微信小程序上一个版本的发布过去了一个月了.在此间,我的工作有些变化,加上正在开发新版本,目前开源版的完善和升级稍稍有些滞后. 虽然这个版本是3.0版,期间有个过渡的2.8版,不 ...
- 微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布!!!
微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布 Weixin-App-Shop 是捷微团队开发的微信小程序商城开源项目,涵盖了微信商城的全部功能,能够快速发布简单易用的小 ...
- SpringBoot2.0微信小程序支付多次回调问题
SpringBoot2.0微信小程序支付多次回调问题 WxJava - 微信开发 Java SDK(开发工具包); 支持包括微信支付.开放平台.公众号.企业微信/企业号.小程序等微信功能的后端开发. ...
随机推荐
- 说出 5 条 IO 的最佳实践?
IO 对 Java 应用的性能非常重要.理想情况下,你不应该在你应用的关键路径上 避免 IO 操作.下面是一些你应该遵循的 Java IO 最佳实践: a)使用有缓冲区的 IO 类,而不要单独读取字节 ...
- 会话缓存(Session Cache)?
最常用的一种使用 Redis 的情景是会话缓存(session cache).用 Redis 缓存会 话比其他存储(如 Memcached)的优势在于:Redis 提供持久化.当维护一个不 是严格要求 ...
- SVG是什么?
SVG表示(scalable vector graphics)可缩放矢量图形.这是一个基于文本的图形语言,它可以绘制使用文本.线.点等的图形,因此可以轻巧又快速地渲染.
- 学习heartbeat-04 原理及部署
1. Heartbeat介绍 1.1 Heartbeat作用 通过它可以将资源(IP及程序服务等资源)从一台故障计算机快速转移到另一台运转正常的机器继续提供服务,在实际生产应用场景中,heartbea ...
- hdfs对文件的增删改查
源代码: pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- js读取cookie 根据cookie名称获取值的方法
//方法1 //存在问题:如果cookie中存在 aaaname=aa;name=bb 获取name的值就会出现错误function getCookie(c_name){ if (document.c ...
- numpy教程03---ndarray的运算
欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...
- SSM框架整合(Spring、SpringMVC、Mybatis)
#毫无疑问我们肯定是使用Spring去整合SpringMVC和Mybatis,在整合过程中我们首先要让各自的模块实现,然后再去使用Spring整合:比如我先实现Mybatis框架的配置,然后再通过测试 ...
- Hadoop安装部署
Hadoop伪分布式搭建 1.准备Linux环境 ①开启网络,ifconfig指令查看ip ②修改主机名为自己名字(hadoop) vim /etc/sysconfig/network NETWORK ...
- axios 内存泄漏
有一个项目需要post后台几万条数据,每次只能请求三五条,所以只能在每次请求成功后自调用这个请求函数. 但这样请求了成千上万次后,浏览器会崩溃并报出 out of Memory 错误,经查询,这是内存 ...