V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
gdtv
V2EX  ›  JavaScript

javascript 计算 123+Math.floor(123*0.008*100)/100+10 为什么等于 133.98000000000002 ?

  •  
  •   gdtv · 2017-03-15 19:32:28 +08:00 · 2958 次点击
    这是一个创建于 2814 天前的主题,其中的信息可能已经有所发展或是发生改变。


    -------------------------

    更新:感谢1楼的指点,改成了这样:(123*100+Math.floor(123*0.008*100)+10*100)/100=133.98,不知有没有更好的方法?

    PS: 为什么markdown模式显示不出星号?
    16 条回复    2017-03-16 00:00:41 +08:00
    jingniao
        1
    jingniao  
       2017-03-15 19:33:50 +08:00 via Android   ❤️ 1
    典型的浮点数问题
    Reficul
        2
    Reficul  
       2017-03-15 19:46:40 +08:00 via Android
    0.1+0.2!=0.3 ,浮点数无解。只能想办法减少误差
    0915240
        3
    0915240  
       2017-03-15 19:50:34 +08:00   ❤️ 1
    这个礼拜的第二回了:

    http://0.30000000000000004.com/
    IamJ
        4
    IamJ  
       2017-03-15 19:54:38 +08:00 via iPhone
    @0915240 这域名 666
    nyanyh
        5
    nyanyh  
       2017-03-15 20:41:13 +08:00
    r#3 @0915240 这域名哈哈哈哈哈哈哈哈哈哈哈哈
    mcfog
        6
    mcfog  
       2017-03-15 20:48:32 +08:00
    不用那么长,我也来个短的 0.58*100
    Shura
        7
    Shura  
       2017-03-15 20:49:29 +08:00 via Android
    建议楼主去学习一下计算机组成原理(
    SoloCompany
        8
    SoloCompany  
       2017-03-15 21:56:43 +08:00
    一大谜团 - 为啥楼主不用 append 也能编辑帖子?
    Mutoo
        9
    Mutoo  
       2017-03-15 22:00:51 +08:00
    keyword: IEEE 754 浮点数计算
    SoloCompany
        10
    SoloCompany  
       2017-03-15 22:04:04 +08:00
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round#Decimal_rounding

    然后你可以试一下
    Math.round10(123+Math.floor(123*0.008*100)/100+10, -10)
    misaka19000
        11
    misaka19000  
       2017-03-15 22:10:23 +08:00   ❤️ 1
    Quaintjade
        12
    Quaintjade  
       2017-03-15 22:38:23 +08:00
    @SoloCompany
    Mozilla 这个还只是一半,负数部分得自己写,因为 js 的 Math.Round()总是向正无穷大取整:
    If the fractional portion is exactly 0.5, the argument is rounded to the next integer in the direction of +∞

    比如 Math.round10(-1.005,-2)的结果是 -1 而不是 -1.01
    wly19960911
        13
    wly19960911  
       2017-03-15 22:47:06 +08:00 via Android
    @SoloCompany 我没记错的话,短时间内能编辑的,
    codelegant
        14
    codelegant  
       2017-03-15 23:06:58 +08:00 via Android
    @0915240 这个网站,的确非常的有意思。
    a87150
        15
    a87150  
       2017-03-15 23:09:27 +08:00 via Android
    世界的错
    zhuziyi
        16
    zhuziyi  
       2017-03-16 00:00:41 +08:00
    ![]( )
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:00 · PVG 18:00 · LAX 02:00 · JFK 05:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.