繁体   English   中英

Python - 如何将浮点数舍入为1位有效数字

Python - How to round down a float to 1 significant digit

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

基本上, 0.45应该变为0.4而不是0.5 并且1945.01应该变为1000.0而不是2000.0

4 个回复

科学表征似乎是要走的路,但数字技术通常比字符串技术更快。 你确实得到偶然的浮点错误...

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一样简单。 以数字方式计算尾数和指数而不是转换为字符串的另一个好处是可以轻松更改sigfigs的数量

使用科学概念来获取有效数字和功率,并计算结果

def significant_1 (s):
    l = len(str(s))   ####make sure there is enough precision
    a = ('%.' + str(l) + 'E') % decimal.Decimal(s)
    #print (a)
    significate_d = a.split(".")[0]
    times = a.split("E")[1]

    result = int(significate_d) * (10 ** int(times))

    return result


print (significant_1(1999))

print (significant_1(1945.01))

print (significant_1(0.45))

输出:

1000
1000
0.4

我认为这是一个很好而简单的方法:

def convert(number, interval):
    return int(number/interval)*interval

样本输出:

1923,1000 -> 1000
12.45,0.1 -> 12.4
 round(number[, ndigits])

返回舍入到小数点后的ndigits数字的浮点值数字。 如果省略ndigits,则默认为零。 结果是一个浮点数。 将值四舍五入为函数减去ndigits的最接近的10的倍数; 如果两个倍数相等,则舍入远离0(因此,例如,round(0.5)为1.0,round(-0.5)为-1.0)。

https://docs.python.org/2/library/functions.html#round

1 如何将Double舍入到有效数字[重复]

这个问题已经在这里有了答案: 如何在Java 31 中将数字四舍五入到小数点后n位 我有一个读取SAS xpt文件并将列值存储到ByteBuffer ,然后使用它的getValue()方法获取Double对象的应用程序。 现在,我必须在小数点后打印Double最多 ...

5 在输出时将 Python 浮点数舍入为 4 位有效数字,在不同的数字范围内

我正在寻找一种方法将 python 中的数字(输出)四舍五入为 4 位有效数字。 也就是说,我想要一个具有以下行为的函数r4() : 在所有这些情况下,我舍入到“4”而不是“5”,因为我想要 IEEE 舍入模式“舍入一半偶数”(舍入到最接近的关系到最近的事件整数),因此该函数还应该产生: ...

7 在Python中如何找到最低有效位数

我正在寻找一种希望找到的简单方法,即数字中的最低有效数字(浮点数或整数)。 例如: 101-> 1 101.2-> 0.2 1.1003-> 0.0003 诸如10、100、1000之类的案例的相关性稍差一些,尽管无论如何我都会对此感兴趣 ...

10 python 中的有效数字舍入

我想像这样四舍五入 42949672 -> 42949700、2147483647 -> 2147480000、4252017622 -> 4252020000 等。 我尝试使用以下,但仅适用于第一个。 如何制作更通用的? 谢谢 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM