为啥带有十进制值的指数表示法会失败? [关闭]

Posted

技术标签:

【中文标题】为啥带有十进制值的指数表示法会失败? [关闭]【英文标题】:Why does exponential notation with decimal values fail? [closed]为什么带有十进制值的指数表示法会失败? [关闭] 【发布时间】:2013-05-11 04:42:02 【问题描述】:

通常1e3 表示10**3

>>> 1e3
1000.0
>>> 10**3
1000

e**3 相比,exp(3) 的情况相似。

>>> exp(3)
20.085536923187668
>>> e**3
20.085536923187664

但现在请注意指数是否为 float 值:

>>> exp(3.1)
22.197951281441636
>>> e**3.1
22.197951281441632

这很好。现在来看第一个例子:

>>> 1e3.1
  File "<stdin>", line 1
    1e3.1
        ^
SyntaxError: invalid syntax
>>> 10**3.1
1258.9254117941675

这表明Python 也不喜欢1e3.1Fortran。 不管它可能是一个标准(!)为什么会这样?

【问题讨论】:

为什么 Visual Basic 使用 ' 作为注释字符,而在任何其他非疯狂语言中,它用于字符串?这就是语言设计者想要的方式。想骂就骂他们。 @MarcB 总是积极思考,然后你会注意到问题背后的要点。您的示例 ' 不相关! 我,一方面,不明白为什么我不允许为2182(1.5)3 【参考方案1】:

e 的符号是数字文字,是许多编程语言的词法语法的一部分,基于标准形式/科学符号。

此符号的目的是允许您通过移动点位置来指定非常大/小的数字。它并不是为了让您将乘以 10 的任意幂的乘法编码为数字文字。因此,该点和后面的数字甚至不被识别为数字文字标记的一部分。

如果您想要任意幂,正如您所发现的,可以使用数学函数和运算符来完成这项工作。与数字文字不同,您甚至可以在运行时确定参数值。

【讨论】:

【参考方案2】:

您似乎将文字的语法与运算符混为一谈。虽然您可以声称 1e3.1 遵循您的“约定”,但应该很清楚 1e3.1 不是 Python 解释器的有效文字表达式。该语言具有已定义的标准语法,并且该语法不支持将浮点文字表达式作为其数字文字的“指数”。

Python 数字文字中的“e”不是运算符(小数点除外)。所以你期望 Python 的文字语法应该支持一些“约定”......基于你猜到的一些模式......并不是特别合理。

【讨论】:

谢谢+一票。显然这只是一个已经完成的协议,否则,编译器将1e3.1识别为数字并不难。顺便说一句,Fortran 也是一样。 我们的答案在“网络”中传递。我看到你的在我的发布后进来了,即使它出现在我的上方。【参考方案3】:

来自docs:

sign           ::=  '+' | '-'
digit          ::=  '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
indicator      ::=  'e' | 'E'
digits         ::=  digit [digit]...
decimal-part   ::=  digits '.' [digits] | ['.'] digits
exponent-part  ::=  indicator [sign] digits            #no dots allowed here  

【讨论】:

不错+点赞。顺便说一句,Fortran 也是如此。如果你能尝试解释一下会更好why @Developer 编程语言尝试遵守IEEE floating point 标准,即指数部分必须是整数。 感谢您的指出和链接,Ashwini。

以上是关于为啥带有十进制值的指数表示法会失败? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

python-import带有十进制值的csv

如何将证书转换为十进制模数和指数

Android十进制格式,如何根据不同的指数值进行十进制格式?

ODP ADO.NET 驱动程序在字符串表示中返回带有额外零的十进制

以指数形式表示数字

怎么把float型转换成int