js中,为什么 0.01+0.05≠0.06?
发布于 1 年前 作者 chinahsj 1917 次浏览 来自 问答

在项目中偶然发现,0.01+0.05并不等于0.06!很震惊,求大佬解释下!! [2U659D]838XG7U3883CIW7E.png](//static.cnodejs.org/FtQBiaYYPhjPvrULGVlxmw7vmHor)

20 回复

说的其他语言就相等似得

说的其他语言就相等似得

去看下浮点数的原理~~ 是有精度损失的。 你可以用 number.js 解决

@justjavac 非常感谢!

@zuohuadong 好的,我去了解下

程序员不知道浮点运算精度才是令人震惊的

@dbit-xia

#include<cstdio>
//
int main() {
    float a = 0.01;
    float b = 0.05;
    printf("%d\n", (a + b) == 0.06 ? 1 : 0);
}

image.png

IEEE754标准了解一下 自豪地采用 CNodeJS ionic

@CodeofGame

package com.company;

public class Main {

    public static void main(String[] args) {
	// write your code here

            double a = 0.01;
            double b = 0.05;
            System.out.printf("%d\n", (a + b) == 0.06 ? 1 : 0);
    }
}

image.png

@AnzerWall image.png 打脸了,java和.net原来都有这个问题,又长姿势了!!!

nodejs 的伙伴们,推荐给你们decimal.js api:http://mikemcl.github.io/decimal.js/ github:https://github.com/MikeMcl/decimal.js

这是程序员基本功吧

归根到底是2进制的问题

因为js中浮点数的精度是小数点后17位,有精度的损失

@waitingsong 什么逻辑错了啊,这个不就是关于浮点数值计算时会产生摄入误差的问题吗?我想错了吗

浮点数在计算机中的存储

回到顶部