相关疑难解决方法(0)

如何在Python中将数字舍入为有效数字

我需要对浮点数进行舍入以在UI中显示.例如,一个重要人物:

1234 - > 1000

0.12 - > 0.1

0.012 - > 0.01

0.062 - > 0.06

6253 - > 6000

1999年 - > 2000年

有没有一种很好的方法可以使用Python库来实现这一点,还是我必须自己编写?

python math rounding

130
推荐指数
9
解决办法
16万
查看次数

查找内置Python函数的源代码?

有没有办法看到内置函数如何在python中工作?我不是指如何使用它们,而是它们是如何构建的,排序枚举背后的代码是什么......?

python python-internals

114
推荐指数
8
解决办法
9万
查看次数

如何在Python中正确地舍入一半浮点数?

我正面临着一个奇怪的round()功能行为:

for i in range(1, 15, 2):
    n = i / 2
    print(n, "=>", round(n))
Run Code Online (Sandbox Code Playgroud)

此代码打印:

0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4
4.5 => 4
5.5 => 6
6.5 => 6
Run Code Online (Sandbox Code Playgroud)

我希望浮动值总是向上舍入,而是舍入到最接近的偶数.

为什么会出现这种行为,以及获得正确结果的最佳方法是什么?

我尝试使用fractions但结果是一样的.

python floating-point precision rounding python-3.x

46
推荐指数
7
解决办法
3万
查看次数

是什么导致Python的float_repr_style使用旧版?

在几乎每个系统上,Python都可以为您提供人类可读的浮点的简短表示形式,而不是17位的机器精度:

Python 3.3.0 (default, Dec 20 2014, 13:28:01) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1
0.1
>>> import sys; sys.float_repr_style
'short'
Run Code Online (Sandbox Code Playgroud)

ARM926EJ-S上,您没有简短的表示形式:

Python 3.3.0 (default, Jun  3 2014, 12:11:19) 
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1
0.10000000000000001
>>> import sys; sys.float_repr_style
'legacy'
Run Code Online (Sandbox Code Playgroud)

对于大多数系统Python 2.7显然将此简短表示形式添加到repr():

现在,在大多数平台上都可以正确舍入浮点数和字符串之间的转换。这些转换发生在许多不同的地方:str()代表浮点数和复数;浮动和复杂构造函数;数字格式;使用marshal,pickle和json模块对浮点数和复数进行序列化和反序列化;在Python代码中解析float和虚数文字;和十进制到浮点转换。

与此相关的是,浮点数x的repr()现在基于最短的十进制字符串返回一个结果,该字符串保证在正确的舍入(使用“从一半到一半到四舍五入的舍入模式”下)可以四舍五入为x。以前,它根据x舍入到17个十进制数字给出了一个字符串。

负责此改进的舍入库可在Windows和使用gcc,icc或suncc编译器的Unix平台上工作。可能在少数平台上无法保证此代码的正确操作,因此在此类系统上不使用该代码。您可以通过检查sys.float_repr_style来确定正在使用的代码,如果正在使用新代码,则将简短显示,而如果未使用,则将使用旧代码。

由Eric Smith和Mark Dickinson使用David Gay的dtoa.c库实现;问题7117

他们说某些平台不能保证( dtoa.c …

python floating-point

5
推荐指数
1
解决办法
313
查看次数