我想将浮点数四舍五入为特定数量的有效数字。与此答案非常相似:https://stackoverflow.com/a/3411435/281021,但是应该正常舍入而不是正常的round()
行为。我不能使用math.floor()
,因为它会将浮点数转换为整数。
基本上,0.45
应该变成0.4
而不是0.5
。
并且1945.01
应该成为1000.0
而不是2000.0
。
最佳答案
科学表示似乎是要走的路,但是对我来说,数字技术通常比字符串技术更快。您确实会偶尔遇到浮点错误...
from math import *
def roundDown(x, sigfigs=1): #towards -inf
exponent = floor(log10(copysign(x,1))) #we don't want to accidentally try and get an imaginary log (it won't work anyway)
mantissa = x/10**exponent #get full precision mantissa
# change floor here to ceil or round to round up or to zero
mantissa = floor(mantissa * 10**(sigfigs-1)) / 10**(sigfigs-1) #round mantissa to sigfigs
return mantissa * 10**exponent
向零或+ inf舍入就像将
floor
更改为ceil
或round
一样容易。通过数字计算尾数和指数而不是强制转换为字符串的另一个好处是可以很容易地更改sigfig的数量关于Python-如何将浮点数舍入到1个有效数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40159120/