首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得没有指数表示法的字符串形式的浮点数?

如何获得没有指数表示法的字符串形式的浮点数?
EN

Stack Overflow用户
提问于 2017-09-26 06:28:33
回答 2查看 1.6K关注 0票数 4

如何获得没有指数表示法的字符串形式的浮点数,即以"e-10"或类似形式结尾的数字?我发现to_s返回带有指数符号的数字。

代码语言:javascript
复制
ms = 1457000.0000000002 % 1000 # => 2.3283064365386963e-10
ms.to_s                        # => "2.3283064365386963e-10"

我很想得到"0.0000000002",但是我没有得到正确的结果。

如果我使用上面的例子并计算"%f" % ms,我得到的是"0.000000",它与"0.0000000002"有很大的不同。

EN

回答 2

Stack Overflow用户

发布于 2017-09-26 07:41:46

我认为如果您指定小数位数(DP) %f,它仍然可以工作。以您的示例为例,输出是e-10的指数,因此如果将DP指定为10将是准确的。下面是一个具体的值:

代码语言:javascript
复制
ms = 1457000.0000000002
secs, ms = ms.divmod(1000)
my_answer = '%.10f' % ms

您的输出将是=> "0.0000000002"

票数 2
EN

Stack Overflow用户

发布于 2017-09-28 04:20:19

这似乎是此问题的副本:

Force Ruby to not output a float in standard form / scientific notation / exponential notation

您可以使用sprintf打印格式化的数字:

代码语言:javascript
复制
ms = 1457000.0000000002
sprintf("%.10f", ms)
 => "1457000.0000000002"

值得注意的是,浮点数并不是完全精确的-所以如果你告诉sprintf显示更多的数字,比如16位,你会看到这个不精确的结果:

代码语言:javascript
复制
sprintf("%.16f", ms)
=> "1457000.0000000002328306"

强制精度的一个技巧是使用to_r将值转换为有理数:

代码语言:javascript
复制
ms = '1457000.0000000002'.to_r
=> (7285000000000001/5000000000)
sprintf("%.16f", ms)
=> "1457000.0000000002000000"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46415122

复制
相关文章

相似问题

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