如何获得没有指数表示法的字符串形式的浮点数,即以"e-10"或类似形式结尾的数字?我发现to_s返回带有指数符号的数字。
ms = 1457000.0000000002 % 1000 # => 2.3283064365386963e-10
ms.to_s # => "2.3283064365386963e-10"我很想得到"0.0000000002",但是我没有得到正确的结果。
如果我使用上面的例子并计算"%f" % ms,我得到的是"0.000000",它与"0.0000000002"有很大的不同。
发布于 2017-09-26 07:41:46
我认为如果您指定小数位数(DP) %f,它仍然可以工作。以您的示例为例,输出是e-10的指数,因此如果将DP指定为10将是准确的。下面是一个具体的值:
ms = 1457000.0000000002
secs, ms = ms.divmod(1000)
my_answer = '%.10f' % ms您的输出将是=> "0.0000000002"
发布于 2017-09-28 04:20:19
这似乎是此问题的副本:
Force Ruby to not output a float in standard form / scientific notation / exponential notation
您可以使用sprintf打印格式化的数字:
ms = 1457000.0000000002
sprintf("%.10f", ms)
=> "1457000.0000000002"值得注意的是,浮点数并不是完全精确的-所以如果你告诉sprintf显示更多的数字,比如16位,你会看到这个不精确的结果:
sprintf("%.16f", ms)
=> "1457000.0000000002328306"强制精度的一个技巧是使用to_r将值转换为有理数:
ms = '1457000.0000000002'.to_r
=> (7285000000000001/5000000000)
sprintf("%.16f", ms)
=> "1457000.0000000002000000"https://stackoverflow.com/questions/46415122
复制相似问题