7

我遇到了与 python 相同的问题但对于 ruby​​。

我需要输出一个像这样的小数字:0.00001,而不是 1e-5。

有关我的特定问题的更多信息,我正在使用输出到文件f.write("My number: " + small_number.to_s + "\n")

对于我的问题,准确性并不是什么大问题,所以只需执行一个 if 语句来检查 small_number < 1e-5 是否可以,然后打印 0 就可以了,它看起来并不像应有的那么优雅。

那么更一般的方法是什么?

4

4 回答 4

9
f.printf "My number: %.5f\n", small_number

您可以将 .5(小数点右侧 5 位)替换为您喜欢的任何特定格式大小,例如,%8.3f 将总共 8 位,小数点右侧 3 位,很像 C/C++ printf 格式字符串。

于 2013-05-06T17:56:22.720 回答
8

如果你总是想要 5 位小数,你可以使用:

"%.5f" % small_number
于 2013-05-06T17:54:37.923 回答
2

我会做这样的事情,这样你就可以去掉尾随的零:

puts ("%.15f" % small_number).sub(/0*$/,"")

不要超过 15,否则你会受到浮点数不精确的影响。

puts ("%.25f" % 0.01).sub(/0*$/,"")
0.0100000000000000002081668
于 2013-05-06T18:03:33.173 回答
2

这也适用于整数,修剪多余的零,并始终将数字作为有效的浮点数返回。为了清楚起见,这使用了sprintf而不是更神秘的%运算符。

def format_float(number)
  sprintf('%.15f', number).sub(/0+$/, '').sub(/\.$/, '.0')
end

例子:

format_float(1) => "1.0"
format_float(0.00000001) => "0.00000001"
于 2019-06-14T13:44:53.297 回答