首页  >  问答  >  正文

javascript - js中两个小数相减,出现的多位小数

这个用js怎么解决,我们是金融公司,所以希望有好的解决方案,两个数同时放大也一样

高洛峰高洛峰2750 天前1274

全部回复(19)我来回复

  • 天蓬老师

    天蓬老师2017-04-11 11:05:38

    js的数字世界你别猜,你猜来猜去也不会明白^^

    文档在这,祝你玩的愉快:numbers

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-11 11:05:38

    同比扩大成整数相减再同比缩小

    回复
    0
  • 高洛峰

    高洛峰2017-04-11 11:05:38

    解决方案就是别用js进行任何商业行为

    回复
    0
  • 怪我咯

    怪我咯2017-04-11 11:05:38

    反对所有“转成整数做完转回去”的答案。

    首先,精度计算,尤其涉及钱的问题,乘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/ 这个方案

    回复
    0
  • 阿神

    阿神2017-04-11 11:05:38

    console.log((18.6-8).toFixed(2));

    输出:10.60
    2代表保留位数。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-11 11:05:38

    最好是后端语言处理数字

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 11:05:38

    后端也有同样的问题的,一般的解决方案是对结果做格式化,保留n位

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-11 11:05:38

    与金钱相关的计算请出门右转找后端,并且看到用float, double处理的请就地埋了(在此仅以java为例,应该用BigDecimal)。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-11 11:05:38

    金融的话,相关计算还是找后台解决比较稳妥。
    float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-11 11:05:38

    看看这个,有没有帮助JS中浮点数运算不精准

    回复
    0
  • 取消回复