Python - 如何将 float 向下舍入到 1 位有效数字

标签 python floating-point

我想将 float 向下舍入到特定数量的有效数字。与这个答案非常相似:https://stackoverflow.com/a/3411435/281021但不是正常的 round() 行为,它应该始终向下舍入。我不能使用 math.floor(),因为它将 float 转换为 int。

基本上,0.45 应该变成 0.4 而不是 0.51945.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 更改为 ceilround 一样简单。以数字方式计算尾数和指数而不是转换为字符串的另一个好处是可以轻松更改符号的数量

关于Python - 如何将 float 向下舍入到 1 位有效数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40159120/

相关文章:

Python 机器学习 API - Microsoft Azure/AWS Lambda

python - Numpy 拆分多维数组

python - 赋值前引用的局部变量 'list'

C 具有基本整数值的 float 给出不同的结果

c# - .NET 框架中是否定义了 FLT_EPSILON?

python - 如何在Python/Kivy中实现ScrollView

C++ float 到 nan

在不支持 double 的 C 编译器上将 64 位 double float 据转换为 Uint32

PHP字符串 float

python - 正则表达式选择逗号和句点 Python