Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 期望值浮动,小数舍入错误_Python - Fatal编程技术网

Python 期望值浮动,小数舍入错误

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)

我正试图舍入到小数点后两位,但有误

我怎样才能转过来

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) * 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
我在下面等你。谢谢你的帮助。谢谢,我找到了我在下面等待的解决方案。谢谢你的帮助,很好!我发布了同样的效果,但不完整,所以我改进了你的:很好!我发布了同样的效果,但不是那么完整,所以我改进了你的:也包括十进制,但有更多的上下文,可能还有更好的方法。也包括十进制,但有更多的上下文和可能更好的方法。