我有一个包含一个很大的浮点数的变量,比如说 a = 999999999999999.99
当我在解释器中输入 int(a)
时,它返回 1000000000000000
。对于这样的长数字,如何获得输出为 999999999999999
?
我有一个包含一个很大的浮点数的变量,比如说 a = 999999999999999.99
当我在解释器中输入 int(a)
时,它返回 1000000000000000
。对于这样的长数字,如何获得输出为 999999999999999
?
999999999999999.99
是一个在浮点数格式下无法精确表示的数字,因此Python会选择最接近的可以表示的值。在这种情况下,最接近的值为1000000000000000。这就是为什么将其转换为整数会得到1000000000000000的原因。decimal.Decimal
。>>> import decimal
>>> a = decimal.Decimal("999999999999999.99")
>>> a
Decimal('999999999999999.99')
>>> int(a)
999999999999999
a
已经在问题中给出了值。代码中已经包含一行a = 999999999999999.99
。在您的代码中,您正在在decimal.Decimal()
内声明a
的值。因此,基本上,我需要从a
获取值,然后将其打印出来。 - Amal Rajandecimal.Decimal
的值与问题中赋给 a
的值不同。 我的值是一个字符串字面量。 这是为了保持精度而必要的。 如果您执行 a = decimal.Decimal(999999999999999.99)
,那么 a
将成为 Decimal('1000000000000000')
。 - Kevindecimal.Decimal(string)
?变量a
已经声明为浮点类型。 - Amal Rajana
已经是一个浮点数,那么您已经永久失去了精度,并且没有办法恢复。 - Kevinint
,而是浮点数本身。您的值需要17位数字精度才能正确表示,而双精度浮点数只有15到16位数字精度。因此,当您输入它时,它会四舍五入到最近的可表示浮点数值,即 1000000000000000.0
。当调用 int
时,它无法做任何事情 - 精度已经丢失。decimal
数据类型,但需要注意相对于常规浮点数,性能确实会受到影响。
999999999999999.99 is 1000000000000000.0
- jonrsharpe