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开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    2879. [NOI2012]美食节【费用流】
    luogu P1012 拼数
    luogu cover
    luogu cogs . [NOIP2003] 传染病控制 WA(1/2)
    luogu P1340 兽径管理 WA
    luogu P1342 请柬
    HTML学习笔记二
    HTML学习笔记一
    arr.sort()
    编写函数实现随机产生指定范围的整数的功能
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/13951712.html
Copyright © 2011-2022 走看看