我想将 float 向下舍入到特定数量的有效数字。与这个答案非常相似:https://stackoverflow.com/a/3411435/281021但不是正常的 round()
行为,它应该始终向下舍入。我不能使用 math.floor()
,因为它将 float 转换为 int。
基本上,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
一样简单。以数字方式计算尾数和指数而不是转换为字符串的另一个好处是可以轻松更改符号的数量
关于Python - 如何将 float 向下舍入到 1 位有效数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40159120/