PyQt - 如何在QLabel中禁用科学计数法

3

我使用 Decimal 模块处理大数字,但对于小于 0.00001 的值,它会变成科学计数法。有没有办法禁用此功能,以显示所有小数位:

round(Decimal(str(value)), 9)

'{0:.9g}'.format(value)

这段代码不能正常工作,因为它会显示所有数字,例如0.0000100000而不是0.00001。

我想要的只是在四舍五入0.0000000015后显示0.000000002。

我尝试了

def set_decimals(self, value, decimals):
    val = '{0:f}'.format(Decimal(str(value)))
    rnd_value = round(Decimal(val), decimals)
    return str(rnd_value)

但它仍然将其转换为科学计数法

谢谢。

2个回答

1
我没有找到比这更好的解决方案:
def regularNotation(value):
    """Sometimes str(decimal) makes scientific notation. This function makes the regular notation."""
    v = '{:.14f}'.format(value).rpartition('.') # 14 digits in fractional part
    return v[0] + (v[1] + v[2]).rstrip('.0') # strip trailing 0s after decimal point

有没有更简单的方法来四舍五入一个双精度数字并显示所有所需的小数位数? - linuxoid
@user665327,我不确定我理解你的意思,但是将所需的数字位数放入 '{:.14f}'.format(value) 中。这样,在最后一行中就不需要修剪小数点后面的尾随零。 - warvariuc
如果我这样做,输出看起来很荒谬:0.00006660000000。我有一个微调控件,用于将输出向下舍入。因此,如果小数点后有超过5个零,我想以标准形式显示它,而不是科学计数法或上述形式。 - linuxoid
regularNotation(round(Decimal(1)/Decimal(15015), 7)) -> '0.0000666' - warvariuc
regularNotation未定义。它是Python模块的一部分吗?还是Qt? - linuxoid
regularNotation 是答案中的函数。 - warvariuc

0

'{0:f}'.format(value)不能返回您想要的结果,因为float类型的默认格式化程序会在固定大小处截断。但是,Decimal本身并非如此:

>>> '{0:f}'.format(Decimal(str(0.0000000000000001)))
'0.0000000000000001'

默认情况下,使用的格式是'g''G',具体取决于上下文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接