将负浮点数取整为浮点数

2024-03-28 20:00:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试舍入一些负浮点数,我想要的格式是像下面的打印/格式方式,而不是四舍五入。问题是print方法不是“干净”的,因为它输出一个带空格的字符串,我从Stackoverflow中的另一个类似问题得到了这段代码。问题是如何像下面这样格式化/取整数字。谢谢你

theta = 0.33161255787892263
math = 0 + (1-0) * (1-math.cos(theta))**5

round(math,8) # Result: 4.8e-07 # 
print("{:18.8f}".format(math)) # Result: '        0.00000048' # 

Tags: 方法字符串代码格式方式整数mathcos
1条回答
网友
1楼 · 发布于 2024-03-28 20:00:35

你说“我希望打印的结果是浮点数而不是字符串”和“结果返回一个负幂浮点数,我希望保留十进制格式作为字符串”。但是你不能这样做,因为你无法控制afloat的内部表示:它们都是以科学记数法的二进制形式存储的。有关详细信息,请参阅维基百科的文章floating-point numbers。在

所以你做不做并不重要

v = 0.00000048

或者

v = 4.8e-07

这两种说法具有相同的效果。在

请注意,许多以十进制形式结束的小数在以二进制形式写入时可能会重复出现。当以二进制形式写入时,唯一终止的分数是n / (2 ** b)的形式,其中n和b是整数。因此,当一个看起来像2的二进制数被转换成无害的2时,它也不会终止。(请参阅Wiki链接以获得更完整的解释)。由于这个问题,通常不取整浮点数直到完成所有计算。在

如果你把一个字符串转换成浮点数,然后再把它从十进制转换成二进制,然后再转换回来。因此,在试图“清理”一个数字时不应使用这样的操作,因为在每个转换步骤中可能会出现舍入错误。在

当然,有时您需要对您将要继续计算的float应用舍入,但如果是这样,您应该谨慎行事,并确保您确实了解您对数据所做的操作。在

。。。在

你发布的代码还有一些奇怪的地方。在

math = 0 + (1-0) * (1-math.cos(theta))**5

首先,您应该使用导入的模块名作为变量名。在上面的语句执行之后,math现在指的是计算的结果,而不是数学模块,因此如果您试图执行x = math.cos(0.5),您将得到一个错误。类似地,不要使用intstrlist等作为变量名。在

其次,0 + (1-0) *实际上是无用的。因此,上述声明可以改写为

result = (1 - math.cos(theta)) ** 5

整个代码片段就会变成

#! /usr/bin/env python

import math

theta = 0.33161255787892263
result = (1 - math.cos(theta)) ** 5

print round(result, 8)
print("{0:.8f}".format(result))

输出

^{pr2}$

相关问题 更多 >