Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python十进制到字符串产生奇怪的科学符号_Python_String_Decimal_Scientific Notation - Fatal编程技术网

Python十进制到字符串产生奇怪的科学符号

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中计算为

我正在处理一个bug,其中将
str
函数应用于
decimal的实例。decimal
给了我字符串
'0E-1000'
。我希望应用于
十进制的
str
总是会给我一个
-?[0-9]+(\.[0-9]+)
形式的字符串,这就是我想要的

首先,如果我理解正确,科学符号
'0E-1000'
表示0 x 10^-1000,即零。为什么我会得到零的这种特殊表示?为什么不
'0E-42'
,哪一个是相同的

其次,我无法手动构造一个复制此错误的
十进制
。bug
Decimal
实例来自外部源。表达式
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'