zoukankan      html  css  js  c++  java
  • 3 * 0.1 == 0.3将会返回什么?

    问题:

    3 * 0.1 == 0.3将会返回什么?

    先说结果:fasle

    首先了解下基础知识:

    十进制整数转换为二进制整数:"除2取余,逆序排列"

    demo如下:

     十进制小数转换成二进制小数采用"乘2取整,顺序排列"

    demo如下:

     我们拿10进制下的0.1来说,在二进制中其值大概是:0.10000000000000000555111512312578270211815834045410156

    所以说在计算机中我们理解的十进制的0.1被转换成了可能是无穷位小数的二进制。

    这就是为什么 3 * 0.1 != 0.3的原因

    首先:什么是round-trip?

    任何浮点数可以最多被17位十进制数字表示,这意味着如果你转换一个浮点数为十进制字符串需要保留17位数字,这样可以通过这17位数字转换恢复原来的浮点数,这种转换就是round-trip

    被打印成长字符串的浮点数比如(0.3,0.8,0.9,1.0)是因为打印出的字符串
    (如:0.30000000000000004)是满足round-trip字符串中最短的一个

    最后推荐使用:BigDecimal

    参考:

    https://www.zhihu.com/question/56545018/answer/149620518

    一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    C#可空类型 T?
    Unity踩过的坑
    Unity可视化数据:创建图表
    unity3d屏幕截图功能
    unity3d插入android有米广告
    Unity调用PC摄像头
    使用Unity的50个建议
    Unity3d流光效果
    unity3d中的Quaternion.LookRotation
    Unity3D中可重载虚函数的总结
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/13951712.html
Copyright © 2011-2022 走看看