Python十进制到字符串产生奇怪的科学符号
我正在处理一个bug,其中将Python十进制到字符串产生奇怪的科学符号,python,string,decimal,scientific-notation,Python,String,Decimal,Scientific Notation,我正在处理一个bug,其中将str函数应用于decimal的实例。decimal给了我字符串'0E-1000'。我希望应用于十进制的str总是会给我一个-?[0-9]+(\.[0-9]+)形式的字符串,这就是我想要的 首先,如果我理解正确,科学符号'0E-1000'表示0 x 10^-1000,即零。为什么我会得到零的这种特殊表示?为什么不'0E-42',哪一个是相同的 其次,我无法手动构造一个复制此错误的十进制。bugDecimal实例来自外部源。表达式str(十进制(0))在REPL中计算为
str
函数应用于decimal的实例。decimal
给了我字符串'0E-1000'
。我希望应用于十进制的str
总是会给我一个-?[0-9]+(\.[0-9]+)
形式的字符串,这就是我想要的
首先,如果我理解正确,科学符号'0E-1000'
表示0 x 10^-1000,即零。为什么我会得到零的这种特殊表示?为什么不'0E-42'
,哪一个是相同的
其次,我无法手动构造一个复制此错误的十进制
。bugDecimal
实例来自外部源。表达式str(十进制(0))
在REPL中计算为'0'
。如何构造一个d
的Decimal
实例,其str(d)
的计算结果为'0E-1000'
编辑:第三,我如何将任意的Decimal
实例转换为十进制表示法中的字符串?如果要复制十进制,只需从字符串构造它:
>>> d=decimal.Decimal("0E-1000")
>>> str(d)
'0E-1000'
我认为差异是0
和0.00000
之间的差异(或者在您的情况下是1000个零),这就是准确性。这在科学情况下可能很重要,在科学情况下,舍入等由操作数的精度控制。如果要使打印一致,请使用:
这个数字来自哪里?它来自Django模型中的一个字段。该字段定义为模型。十进制字段(最大位数=1000,小数位数=1000,空格=True,null=True)
。啊,规范化
帮助!奇怪的我希望所有标准化的小数都能自动标准化。在同一数据类型中必须处理同一数字的多个等价表示是非常奇怪的。(我还必须考虑一下这个“精确”的东西,它是由一些可怕的全球环境指定的…)可能会让全球远离。只需将缩进进一步推向80字符的PEP8标记即可。。。
>>> d=decimal.Decimal("0E-1000")
>>> d
Decimal('0E-1000')
>>> d.normalize()
Decimal('0')
>>> str(d.normalize())
'0'