Python - 将浮点数舍入为2位数

use*_*521 2 python rounding

我需要将一个浮点变量舍入为2位有效数字,并将结果存储到一个新变量中(或者之前相同,它没关系)但是这是发生的事情:

>>> a    
981.32000000000005    
>>> b= round(a,2)    
>>> b
981.32000000000005
Run Code Online (Sandbox Code Playgroud)

我需要这个结果,但需要一个不能是字符串的变量,因为我需要将它作为一个浮点数插入...

>>> print b    
981.32
Run Code Online (Sandbox Code Playgroud)

实际上截断也可以工作我在这种情况下不需要极端精确.

Dav*_*nan 8

你要做的事实上是不可能的.那是因为981.32不能完全表示为二进制浮点值.在最近的双精度二进制浮点值是:

981.3200000000000500222085975110530853271484375
Run Code Online (Sandbox Code Playgroud)

我怀疑这可能会让你感到震惊.如果是这样,那么我建议你阅读每个计算机科学家应该知道的关于浮点运算的内容.

您可以选择通过以下方式之一解决问题:

  1. 接受二进制浮点数不能准确表示这些值,并继续使用它们.根本不做任何舍入,并保持全部价值.如果要将值显示为文本,请对其进行格式化,以便仅发出两个小数位.
  2. 使用可以准确表示您的号码的数据类型.这意味着十进制而不是二进制类型.在Python中你会使用decimal.

  • @PadraicCunningham我做不到.你不能这样做.没人能做到这一点.不是二进制浮点数.是不可能的. (2认同)
  • @ user3484521您在"正常工作"的机器上看到的是数字的简化显示,而不是其实际内容. (2认同)