首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设置不带尾随零的浮点数的格式

设置不带尾随零的浮点数的格式
EN

Stack Overflow用户
提问于 2010-03-14 08:27:39
回答 18查看 151.8K关注 0票数 215

如何格式化一个浮点数,使其不包含尾随零?换句话说,我希望得到的字符串尽可能短。

例如:

代码语言:javascript
复制
3 -> "3"
3. -> "3"
3.0 -> "3"
3.1 -> "3.1"
3.14 -> "3.14"
3.140 -> "3.14"
EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2010-03-14 09:11:25

我,我会做的

--保证定点格式,而不是科学记数法,等等。

,但是,它是有效的(我不知道如何强制

从不使用科学记数法;-)。

票数 211
EN

Stack Overflow用户

发布于 2010-03-14 08:34:31

你可以使用

要实现这一点,请执行以下操作:

代码语言:javascript
复制
'%g'%(3.140)

或者,使用Python≥2.6:

代码语言:javascript
复制
'{0:g}'.format(3.140)

或者,使用Python≥3.6:

代码语言:javascript
复制
f'{3.140:g}'

文档

原因(在其他方面)

无关紧要的尾随零

要成为

从有效位数中删除,如果小数点后面没有剩余的数字,小数点也将被删除。

票数 187
EN

Stack Overflow用户

发布于 2016-06-10 05:17:10

在看了几个类似问题的答案后,这似乎是我最好的解决方案:

代码语言:javascript
复制
def floatToString(inputValue):
    return ('%.15f' % inputValue).rstrip('0').rstrip('.')

我的理由是:

并没有摆脱科学记数法。

代码语言:javascript
复制
>>> '%g' % 0.000035
'3.5e-05'

15位小数似乎避免了奇怪的行为,并且有足够的精度来满足我的需求。

代码语言:javascript
复制
>>> ('%.15f' % 1.35).rstrip('0').rstrip('.')
'1.35'
>>> ('%.16f' % 1.35).rstrip('0').rstrip('.')
'1.3500000000000001'

我本可以用

而不是

,但这有点慢(~30%)。

我本可以用

,但这也有一些问题。首先,它的速度要慢得多(~11倍)。我还发现,虽然它有相当高的精度,但在使用时仍然会受到精度损失的影响。

..。

代码语言:javascript
复制
>>> Decimal('0.21000000000000000000000000006').normalize()
Decimal('0.2100000000000000000000000001')
>>> Decimal('0.21000000000000000000000000006')
Decimal('0.21000000000000000000000000006')

最重要的是,我仍然会转换为

从一个

这可能会让你得到一些与你输入的数字不同的东西。我想

当算术保持不变时,效果最好

是用字符串初始化的。

代码语言:javascript
复制
>>> Decimal(1.35)
Decimal('1.350000000000000088817841970012523233890533447265625')
>>> Decimal('1.35')
Decimal('1.35')

我相信精确度的问题

可以使用上下文设置来调整到需要的内容,但是考虑到已经很慢的速度和不需要荒谬的精度,以及我仍然需要从浮点型转换并失去精度的事实,我认为它不值得追求。

我不关心可能的"-0“结果,因为-0.0是一个有效的浮点数,而且它可能很少出现,但是既然你确实提到你想让字符串结果尽可能短,你总是可以使用一个额外的条件,而额外的速度代价非常小。

代码语言:javascript
复制
def floatToString(inputValue):
    result = ('%.15f' % inputValue).rstrip('0').rstrip('.')
    return '0' if result == '-0' else result
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2440692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档