我想从两个角度回答:
一:十进制小数转化成二进制小数的方法。(简单举例,看完就可以自己用笔进行运算。)
二:如何解决python中的浮点数运算问题。
关于一:
拿1.375这个十进制数举例,python解释器会将这个十进制数字转化成二进制,然后计算机内部对二进制进行计算后,输入回解释器,解释器再将二进制转化成十进制呈现给我们。
我们看看1.375换算成二进制的过程:
“.”前面的不用说了,就是1,“.”后面的是0.375。0.375=3/8,3/8=3*2^-3;3在二进制中是11,那么根据^-3这个位置提示符可知这个11在“0.”往后数三位的位置落位,位数不够拿0补,也就是0.011,那么十进制1.375转化成二进制就是1.011。
实在抱歉,我无法用更白的话去讲这个过程了,有兴趣的朋友可以拿笔对照计算器的结果试验几次。
如果掌握了这个计算方法,我们就会发现,0.1这个十进制数字想换算成二进制,会变成0.0001100.....110.....无穷无尽的1和0,那么这个二进制再转化成十进制时,自然就会产生错误。
而类似0.1这样的例子还有很多,这就是python(其它解释器也一样)浮点数计算会产生问题的原因。
关于二:
为避免浮点数运算错误,我们要使用python内置的“round”和“decimal”对浮点数进行运算。
前者对浮点数运算结果进行标准的四舍五入。后者采用的是“奇进偶不进”的取舍选择,也就是俗称的银行家算法。
可即便这样,少许运算结果还是会出现错误,这时我们就需要借助“format”这个函数,这个函数可以对运算结果进行格式化,得到我们想要的结果。
想要知道上述三个函数的具体使用方法搜相关文档即可。
用手机码字,所以请原谅错别字和随性的表达方式。
回答完毕。