84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
这个用js怎么解决,我们是金融公司,所以希望有好的解决方案,两个数同时放大也一样
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
js的数字世界你别猜,你猜来猜去也不会明白^^
js
文档在这,祝你玩的愉快:numbers
同比扩大成整数相减再同比缩小
解决方案就是别用js进行任何商业行为。
别用js进行任何商业行为
反对所有“转成整数做完转回去”的答案。
首先,精度计算,尤其涉及钱的问题,乘100再除100并不能解决问题,例如0.58*100=57.99999不仅限于JS,任何编程语言,只要是按照IEEE标准的浮点数(几乎所有语言),它的存储结构就限制了它做不到精度计算(顺带一提,相等的判断用==很多时候也是错的,标准的做法是a-b < 0.000001),换句话说,只要用了语言中的浮点数(JS里就是所有Number),就会丢精度
0.58*100=57.99999
a-b < 0.000001
具体我不多做解释,贴一下鸟哥的科普文 => http://www.laruence.com/2013/03/26/2884.html
要正确地处理这个问题,唯一的途径就是不使用浮点数,而使用其他类型(比如字符串)来进行运算,评论中有人提的math.js可以通过选项来支持,背后封装的 https://github.com/MikeMcl/decimal.js/ 这个方案
console.log((18.6-8).toFixed(2));
输出:10.602代表保留位数。
最好是后端语言处理数字
后端也有同样的问题的,一般的解决方案是对结果做格式化,保留n位
与金钱相关的计算请出门右转找后端,并且看到用float, double处理的请就地埋了(在此仅以java为例,应该用BigDecimal)。
float
double
BigDecimal
金融的话,相关计算还是找后台解决比较稳妥。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。
看看这个,有没有帮助JS中浮点数运算不精准
js
的数字世界你别猜,你猜来猜去也不会明白^^文档在这,祝你玩的愉快:numbers
同比扩大成整数相减再同比缩小
解决方案就是
别用js进行任何商业行为
。反对所有“转成整数做完转回去”的答案。
首先,精度计算,尤其涉及钱的问题,乘100再除100并不能解决问题,例如
0.58*100=57.99999
不仅限于JS,任何编程语言,只要是按照IEEE标准的浮点数(几乎所有语言),它的存储结构就限制了它做不到精度计算(顺带一提,相等的判断用==很多时候也是错的,标准的做法是
a-b < 0.000001
),换句话说,只要用了语言中的浮点数(JS里就是所有Number),就会丢精度具体我不多做解释,贴一下鸟哥的科普文 => http://www.laruence.com/2013/03/26/2884.html
要正确地处理这个问题,唯一的途径就是不使用浮点数,而使用其他类型(比如字符串)来进行运算,评论中有人提的math.js可以通过选项来支持,背后封装的 https://github.com/MikeMcl/decimal.js/ 这个方案
console.log((18.6-8).toFixed(2));
输出:10.60
2代表保留位数。
最好是后端语言处理数字
后端也有同样的问题的,一般的解决方案是对结果做格式化,保留n位
与金钱相关的计算请出门右转找后端,并且看到用
float
,double
处理的请就地埋了(在此仅以java为例,应该用BigDecimal
)。金融的话,相关计算还是找后台解决比较稳妥。
float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。
看看这个,有没有帮助JS中浮点数运算不精准