Python 期望值浮动,小数舍入错误
我正试图舍入到小数点后两位,但有误 我怎样才能转过来 7.1450,应为:7.15 7.144,应为7.14 我将感谢您的帮助,我已经寻找了很长时间,没有找到解决方案。试试这个Python 期望值浮动,小数舍入错误,python,Python,我正试图舍入到小数点后两位,但有误 我怎样才能转过来 7.1450,应为:7.15 7.144,应为7.14 我将感谢您的帮助,我已经寻找了很长时间,没有找到解决方案。试试这个 import numpy as np x = 2.78 print(np.round(x,1)) 它将提供愿望输出,如 >>>printnp.roundx,1 2.8 也试试这个 import math def round_nearest(num, a): return round(round(num / a)
import numpy as np
x = 2.78
print(np.round(x,1))
它将提供愿望输出,如
>>>printnp.roundx,1
2.8
也试试这个
import math
def round_nearest(num, a):
return round(round(num / a) * a, -int(math.floor(math.log10(a))))
round_nearest(1.145, 0.05)
>>> round_nearest(1.145, 0.05)
1.15
试试这个
import numpy as np
x = 2.78
print(np.round(x,1))
它将提供愿望输出,如
>>>printnp.roundx,1
2.8
也试试这个
import math
def round_nearest(num, a):
return round(round(num / a) * a, -int(math.floor(math.log10(a))))
round_nearest(1.145, 0.05)
>>> round_nearest(1.145, 0.05)
1.15
这个怎么样
def round2(number, digit=0):
return int(number*10**digit+0.5)/10**digit
这个怎么样
def round2(number, digit=0):
return int(number*10**digit+0.5)/10**digit
您可以添加一个非常小的值,使其略高于0.5 这里我使用sys.float_info.min,它是:
您可以添加一个非常小的值,使其略高于0.5 这里我使用sys.float_info.min,它是:
我刚刚在网上找到了这个问题的答案 请注意,浮动的round行为可能令人惊讶:例如,round2.675,2给出了2.67,而不是预期的2.68。这不是一个错误:这是因为大多数小数不能精确地表示为浮点。有关更多信息,请参阅 如果您需要更精确的方法,可以使用模块
我刚刚在网上找到了这个问题的答案 请注意,浮动的round行为可能令人惊讶:例如,round2.675,2给出了2.67,而不是预期的2.68。这不是一个错误:这是因为大多数小数不能精确地表示为浮点。有关更多信息,请参阅 如果您需要更精确的方法,可以使用模块 该模块允许您控制使用的舍入模式。你在找我 我自己也不太熟悉十进制,但这是我发现的最简单的方法:
import decimal
with decimal.localcontext() as ctx:
ctx.rounding = decimal.ROUND_HALF_UP
a = decimal.Decimal('7.145')
print(round(a, 2)) # -> 7.15
该模块允许您控制使用的舍入模式。你在找我
我自己也不太熟悉十进制,但这是我发现的最简单的方法:
import decimal
with decimal.localcontext() as ctx:
ctx.rounding = decimal.ROUND_HALF_UP
a = decimal.Decimal('7.145')
print(round(a, 2)) # -> 7.15
Python以2进制格式存储十进制数。比如说, 0.5存储为1/2 0.75存储为1/2+1/4 你观察到了吗?不能以这种方式存储所有小数。因此,它保持了很大的精度。例如,0.1不能以这种方式准确存储。它四舍五入到最接近的小数点 例如,7.1450存储为7.1449999999957367435854399888477325439453125。因此,自然地,当圆应用于此,它给出7.14 那么,如何解决这个问题呢? 在四舍五入之前,将一个非常低的值(比如0.000000001)添加到小数
它完成了这项工作。Python以2进制格式存储十进制数。比如说, 0.5存储为1/2 0.75存储为1/2+1/4 你观察到了吗?不能以这种方式存储所有小数。因此,它保持了很大的精度。例如,0.1不能以这种方式准确存储。它四舍五入到最接近的小数点 例如,7.1450存储为7.1449999999957367435854399888477325439453125。因此,自然地,当圆应用于此,它给出7.14 那么,如何解决这个问题呢? 在四舍五入之前,将一个非常低的值(比如0.000000001)添加到小数
它完成了任务。问题是正常的。在python2中,round0.5是1,但python3的值更改为0。如果我们检查python3中的round文档,我们会发现这样一句话:值被四舍五入到最接近幂减去ndigit的10的倍数;如果两个倍数相等接近,则向偶数方向取整。所以这个规则不是传统的四舍五入。嗨,如果我读到PythonV2和3之间的区别,以及关于上下四舍五入的内容。但我无法让它工作,我也尝试过各种功能,结果都是一样的。@Giancarlo它的工作原理与文档中的完全一样。如果你的期望不同,那么是你的期望错了;谁也帮不了你。@pntehan那么为什么第7.165轮,第2轮到第7.17轮?你应该看看第7轮的文件,它会告诉你为什么。这个问题很正常。在python2中,round0.5是1,但python3的值更改为0。如果我们检查python3中的round文档,我们会发现这样一句话:值被四舍五入到最接近幂减去ndigit的10的倍数;如果两个倍数相等接近,则向偶数方向取整。所以这个规则不是传统的四舍五入。嗨,如果我读到PythonV2和3之间的区别,以及关于上下四舍五入的内容。但我无法让它工作,我也尝试过各种功能,结果都是一样的。@Giancarlo它的工作原理与文档中的完全一样。如果你的期望不同,那么是你的期望错了;没有人能帮你。@pntehan那么为什么round7.165,2到7.17?你应该看看round的文档,它会告诉你为什么。np.round7.145,2仍然返回7.14hi,导入numpy为np x=7.1450 printnp。roundx,2,预期:7.15np.round7.145,2仍然返回7.14hi,导入numpy为np x=7.1450 printnp。roundx,2,预期:7.15谢谢,我找到了solu
我在下面等你。谢谢你的帮助。谢谢,我找到了我在下面等待的解决方案。谢谢你的帮助,很好!我发布了同样的效果,但不完整,所以我改进了你的:很好!我发布了同样的效果,但不是那么完整,所以我改进了你的:也包括十进制,但有更多的上下文,可能还有更好的方法。也包括十进制,但有更多的上下文和可能更好的方法。