如何将大型浮点数转换为整数?

3

我有一个包含一个很大的浮点数的变量,比如说 a = 999999999999999.99

当我在解释器中输入 int(a) 时,它返回 1000000000000000。对于这样的长数字,如何获得输出为 999999999999999


2
999999999999999.99 is 1000000000000000.0 - jonrsharpe
2个回答

7
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 Rajan
我传递给 decimal.Decimal 的值与问题中赋给 a 的值不同。 我的值是一个字符串字面量。 这是为了保持精度而必要的。 如果您执行 a = decimal.Decimal(999999999999999.99),那么 a 将成为 Decimal('1000000000000000') - Kevin
如何将它转换为字符串并使用decimal.Decimal(string)?变量a已经声明为浮点类型。 - Amal Rajan
1
如果a已经是一个浮点数,那么您已经永久失去了精度,并且没有办法恢复。 - Kevin

4
问题并不在于 int,而是浮点数本身。您的值需要17位数字精度才能正确表示,而双精度浮点数只有15到16位数字精度。因此,当您输入它时,它会四舍五入到最近的可表示浮点数值,即 1000000000000000.0。当调用 int 时,它无法做任何事情 - 精度已经丢失。
如果您需要准确表示这种类型的值,则可以使用 decimal 数据类型,但需要注意相对于常规浮点数,性能确实会受到影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接