美文网首页IT技术篇码农的世界程序员技术栈
Python避坑:浮点数运算出现不确定尾数

Python避坑:浮点数运算出现不确定尾数

作者: 霜天渔火 | 来源:发表于2019-06-05 18:15 被阅读1次

什么是不确定尾数

我们都知道在计算机中数据由二进制表示,而浮点数则是小数的一种二进制表示方法。

由于浮点数存在精度限制,在Python中使用浮点数做运算时就可能会产生不确定尾数

不确定尾数

比如0.1 + 0.2的运算结果应该是0.3,但是在Python中输出的却是0.30000000000000004。小数点后十七位出现了不确定尾数,这与浮点数的精度是相符合的。

不确定尾数的影响

不确定尾数是一种比较常见的现象,在编写程序时要注意避免,否则容易产生不易察觉的bug。

比如下面这段简单的程序,它判断用户的计算结果是否正确:

x = 0.1
y = 0.2
z = input(str(x) + '+' + str(y) + '=')
if x + y == eval(z):
  print('Correct Answer')
else:
  print('Wrong Answer')

如果用户输入了正确的答案0.3,程序本来应该输出“Correct Answer”,然而由于不确定尾数的存在,程序依然输出“Wrong Answer”。

实验结果:

判断出错

如何避免受不确定尾数的影响

既然知道了不确定尾数会带来不可预料的bug,我们在编写程序时就要留意避免这种局面,一种常用的方法是使用round()函数只保留运算结果的前几位小数,这样就自然去掉了小数点后十多位的不确定尾数。

刚才那段代码可以修改为如下版本:

x = 0.1
y = 0.2
z = input(str(x) + '+' + str(y) + '=')
if round(x + y, 6) == eval(z):
  print('Correct Answer')
else:
  print('Wrong Answer')

这里用round(x + y, 6)来保留到小数点后六位。实验结果:

判断正常

相关文章

  • Python避坑:浮点数运算出现不确定尾数

    什么是不确定尾数 我们都知道在计算机中数据由二进制表示,而浮点数则是小数的一种二进制表示方法。 由于浮点数存在精度...

  • 2018-08-28

    3.1 数字类型及操作 浮点数类型 浮点数间运算存在不确定尾数,如0.1+0.2=0.3000004 使用roun...

  • 3.基本数据类型

    浮点数间运算存在不确定尾数,运算及比较用round()函数辅助 round(x,d) :对x四舍五入,d是小数截取...

  • python- format

    python不确定尾数

  • 不确定尾数问题

    浮点数间运算存在不确定尾数,不是bug 小数部分十进制不是都可以精确转换成二进制round函数round(x,d)...

  • Python入门第二课

    Python中整数和浮点数 Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全...

  • JS程序员入门Python笔记-语法篇

    1、 语法改动 2、和数学运算不同的地方是,Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数: ...

  • js浮点数运算问题---莫名出现多位小数

    问题:js浮点数运算问题---莫名出现多位小数 // 原因:这是由于在运算的时候先把浮点数转化成二进制后进行运算,...

  • Javascript 盲点

    1.javestript 中所有的数字都是浮点型 js在浮点数运算时会出现多位小数的不准确结果,浮点数运算的误差。...

  • js浮点数运算问题--莫名出现多位小数

    问题:js浮点数运算时,莫名出现多位小数 原因:这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数...

网友评论

    本文标题:Python避坑:浮点数运算出现不确定尾数

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