在我的情况下,我试图将一个浮点数
在完美的世界里,除法结果应该是一个完美的整数(这里是70)。但是浮点运算经常不完美。
我想要最简单、最安全、最高效的方法来避免将商强制转换为
我现在的最佳解决方案是像这样做:
p
除以另一个q
。分子是分母的倍数,并且两者具有以下属性:
- 可以用十进制表示
- 最多有3或4个有效数字
- 介于
1
和1e-8
之间。
p = .0014
和q = .00002
)在完美的世界里,除法结果应该是一个完美的整数(这里是70)。但是浮点运算经常不完美。
我想要最简单、最安全、最高效的方法来避免将商强制转换为
int
时返回p/q - 1
的错误。我现在的最佳解决方案是像这样做:
int(p/q + 1e-10)
但那种方法感觉不太干净,可能不如其他可能的方法有效。
另外,我知道可以四舍五入,但这在代码中似乎会误导,并且可能比某些直接转换的方式效率低。
decimal
模块。 - Peter DeGlopperdecimal
才有帮助。它在表示三分之一或更糟的 sqrt(2) 时并不比二进制浮点数更好。 - Patricia Shanahanround()
生成一个浮点数,然后必须转换为int
。 - watsonicp
是q
的精确整数倍的信息从哪里来?这些是财务数据吗? - Mark Dickinson