相关疑难解决方法(0)

为什么十进制数不能用二进制表示?

关于浮点表示,已经向SO发布了几个问题.例如,十进制数0.1没有精确的二进制表示,因此使用==运算符将其与另一个浮点数进行比较是危险的.我理解浮点表示的原理.

我不明白的是,从数学的角度来看,为什么小数点右边的数字比左边的数字更"特殊"?

例如,数字61.0具有精确的二进制表示,因为任何数字的整数部分始终是精确的.但数字6.10并不准确.我所做的只是将十进制移动到一个地方,然后我突然从Exactopia转到了Inexactville.在数学上,两个数字之间应该没有内在差异 - 它们只是数字.

相比之下,如果我将小数位移到另一个方向以产生数字610,我仍然在Exactopia中.我可以继续向那个方向前进(6100,610000000,610000000000000),它们仍然是精确,准确,准确的.但是一旦小数越过某个阈值,数字就不再精确了.

这是怎么回事?

编辑:为了澄清,我想远离关于行业标准表示的讨论,例如IEEE,并坚持我认为是数学上"纯粹"的方式.在基数10中,位置值为:

... 1000  100   10    1   1/10  1/100 ...
Run Code Online (Sandbox Code Playgroud)

在二进制文件中,它们将是:

... 8    4    2    1    1/2  1/4  1/8 ...
Run Code Online (Sandbox Code Playgroud)

对这些数字也没有任何限制.位置无限增加到左侧和右侧.

math floating-point

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

在Python中截断为三位小数

我如何获得1324343032.324?

如下所示,以下内容不起作用:

>>1324343032.324325235 * 1000 / 1000
1324343032.3243253
>>int(1324343032.324325235 * 1000) / 1000.0
1324343032.3239999
>>round(int(1324343032.324325235 * 1000) / 1000.0,3)
1324343032.3239999
>>str(1324343032.3239999)
'1324343032.32'
Run Code Online (Sandbox Code Playgroud)

python

46
推荐指数
9
解决办法
11万
查看次数

将值浮动为字典键

我正在开发一个用于微量滴定板分析的课程.样本在单独的文件中描述,条目用于有序字典.其中一个关键是pH,通常以浮子形式给出.例如6.8

我可以将其导入为十进制,Decimal('6.8')以避免浮动为dict键.另一种解决方案是用例如像6p8的p替换点或在我的样本描述中写入6p8,从而在开始时消除问题.但这会引起麻烦,因为我无法在我的数字中绘制6p8的pH值.

你会如何解决这个问题?

python floating-point dictionary key

22
推荐指数
2
解决办法
2万
查看次数

Python字符串格式化一个浮点数,如何截断而不是四舍五入

是否有格式选项,以便

>>> '%.1(format)'%2.85
Run Code Online (Sandbox Code Playgroud)

给出'2.8'?

在 Python 2.7 中,'f' 格式四舍五入到最接近的

>>> "{:.0f}".format(2.85)
'3'
>>> "%.0f"%2.85
'3'
>>> "%.1f"%2.85
'2.9'
>>> "%i"%2.85
'2'
Run Code Online (Sandbox Code Playgroud)

python string.format

8
推荐指数
1
解决办法
8535
查看次数

截断浮点数的十进制数字numpy数组

我想截断numpy数组中的float值,例如。

2.34341232 --> 2.34 
Run Code Online (Sandbox Code Playgroud)

我阅读了截断浮点后的内容,但其中有一个浮点。我不想在numpy数组上运行循环,这将非常昂贵。numpy中是否有任何内置方法可以轻松做到这一点?我确实需要将输出作为浮点数而不是字符串。

python numpy vectorization

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

转换为浮点数而不舍入小数位数

我有一个列表,它包含一个特定的数字'5.74536541',我转换为浮点数.

我正在使用Python 3打印它,("%0.2f" % (variable))但它总是打印出5.75而不是5.74.

我知道你在考虑谁在乎,但这是货币转换器计划,我不希望货币向上/向下舍入,但确切地说.

如何保持它不被舍入而且还保持2位小数?

python floating-point list

4
推荐指数
1
解决办法
7332
查看次数

将小数位移到某些数字而不进行舍入

我已经找到了十几个答案,但不是他们正在寻找的,我不想向上或向下舍入,我知道我可以将数字舍入如下:

>>> print('%.3f' % 15.555555)
15.556

>>> round(15.555555, 3)
15.666
Run Code Online (Sandbox Code Playgroud)

但我需要得到15.555.我应该使用正则表达式吗?

python

1
推荐指数
2
解决办法
1万
查看次数

有限浮点小数点而不对数字进行四舍五入

我想将一个数字转换为具有 3 位小数点的浮点数,但我希望它不进行四舍五入。例如:

a = 12.341661
print("%.3f" % a)
Run Code Online (Sandbox Code Playgroud)

此代码返回此数字:

12.342
Run Code Online (Sandbox Code Playgroud)

但我需要原始号码,我需要这个:

12.341
Run Code Online (Sandbox Code Playgroud)

我编写了一个代码,从用户那里接收数字并将其转换为浮点数。我不知道用户输入的数字是什么。

python floating-point numbers decimal-point rounding

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

有没有办法抑制python中的舍入?

有没有办法抑制python舍入,例如:

>>> getcontext().prec = 11; print (Decimal(1.1237836550999999999)*10**10)
11237836551
Run Code Online (Sandbox Code Playgroud)

我需要显示十进制数的前十位小数,所以实际上我需要11237836550作为输出,我不需要在最后一位数上舍入(在这种情况下,0舍入为1).

有时我可以增加精度(不是在这种情况下),然后安全地执行计算,如下所示:

>>> getcontext().prec = 14; print (Decimal(1.12378365509978)*10**10)
11237836550.998
Run Code Online (Sandbox Code Playgroud)

但是假设你在'0'之后不知道数字的小数部分,例如它可能是1.123783655099999999999999999999999999 ......等等,那么你不能依赖这个'变通方法'.

那么,有没有办法告诉python,"对于这个计算,我不希望执行任何舍入,实际上我想要你只返回我需要的小数位数(在这个例子中为10),扔掉任何东西其他之后"?

我在这里看了一下Python中的截断浮点数,但基本上我需要的不是一个截断浮点数的字符串,而是用于执行计算的另一个小数.此外,在trunc我链接的帖子中接受的答案的功能在这种情况下不起作用,因为十进制将在它被传递到函数的'f'参数之前被舍入:

>>> def trunc(f, n):
...     '''Truncates/pads a float f to n decimal places without rounding'''
...     return ('%.*f' % (n + 1, f))[:-1]
... 
>>> trunc(Decimal(1.12378365509978), 10)
'1.1237836551' # and not 1.1237836550 as needed
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

python decimal rounding

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

Python字符串格式,字符串库

如何打印出不超过两位十进制数字的精度,如5.32而不是5.32436675?在python中是否有关于此的关键字.

python

-1
推荐指数
1
解决办法
145
查看次数