Python3.中的浮点数运算(存在的.99999问题)

1、问题:

进行浮点小数计算时候出现了如下,不是想要的结果,查了一下原因,简单记录!

上面两个并不是期待的值,有时候会对结果造成影响(做题没通过!!!)

2、粗鄙了解到的原因:

参考链接:知乎与文档

https://www.zhihu.com/question/25457573/answer/30851062icon-default.png?t=M276http://python浮点数运算,第2个回答

15. 浮点算术:争议和限制 — Python 3.8.13 文档icon-default.png?t=M276https://docs.python.org/zh-cn/3.8/tutorial/floatingpoint.html        

       大概理解,知乎第2个答案,小数以二进制形式的不表达具有有穷性导致。例如0.625二进制是0.101,0.4不能被精确转化0.0110…….无限循环小数,但是计算机存储资源有限,因此存储的二进制小数与表示的二进制小数不同。

————————————————0.625二进制小数表达—————————————————

        (1) 0.625*2 = 1.25, 整数部分为1,小数部分为0.25

        (2) 0.25 * 2 = 0.5 , 整数部分为0,小数部分为0.5

        (3) 0.5 * 2 = 1 , 整数部分为1,小数部分为0

        所以0.625的二进制表示就是0.101

3、简单解决办法

方法一:精确计算

        引入decimal函数,进行十进制的精确小数计算。如上a1,b1所示,传入的浮点小数需要转换为字符串型,整数不需要。注意返回的内类型是Decimal,可能需要转换

方法二:约数

        1、使用round()函数进行约数处理,如a2;

        2、使用格式化输出进行处理,如a3,除%以外还有format()输出格式。