美文网首页
python 3*0.3到底等于多少

python 3*0.3到底等于多少

作者: PinoyCao | 来源:发表于2020-04-05 11:10 被阅读0次

    python2和python3中直接运算3 * 0.3都会输出0.8999999999999999

    Python 2.7.16 (default, Feb 29 2020, 01:55:37) 
    [GCC 4.2.1 Compatible Apple LLVM 11.0.3 (clang-1103.0.29.20) (-macos10.15-objc- on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 3 * 0.3
    0.8999999999999999
    
    Python 3.6.5 (default, Mar 30 2018, 06:41:53) 
    [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 3*0.3
    0.8999999999999999
    

    这是为什么呢?
    其实,大部分语言都有这样的问题,计算机底层都是使用的2进制表达来进行运算;0.3被识别为float类型,但0.3无法被2的整数进制表示,因为float类型存储位数问题,0.3只能取近似值。

    具体0.3转二进制的过程是这样的:

    • 0.3 * 2 = 0.6 取整数部分 得 0 ,小数部分继续计算
    • 0.6 * 2 = 1.2 得 1
    • 0.2 * 2 = 0.4 得 0
    • 0.4 * 2 = 0.8 得 0
    • 0.8 * 2 = 1.6 得 1
    • 0.6 * 2 = 1.2 得 1
    • 0.2 * 2 = 0.4 得 0
    • 0.4 * 2 = 0.8 得 0
      出现循环,0.3 = (0.01001100....)B

    其实像0.1、0.7等浮点数字都存在这样的问题, 它们的二进制也无法被2的整数进制表示。

    相关文章

      网友评论

          本文标题:python 3*0.3到底等于多少

          本文链接:https://www.haomeiwen.com/subject/onwdphtx.html