我遇到了与 python 相同的问题,但对于 ruby。
我需要输出一个像这样的小数字:0.00001,而不是 1e-5。
有关我的特定问题的更多信息,我正在使用输出到文件f.write("My number: " + small_number.to_s + "\n")
对于我的问题,准确性并不是什么大问题,所以只需执行一个 if 语句来检查 small_number < 1e-5 是否可以,然后打印 0 就可以了,它看起来并不像应有的那么优雅。
那么更一般的方法是什么?
f.printf "My number: %.5f\n", small_number
您可以将 .5(小数点右侧 5 位)替换为您喜欢的任何特定格式大小,例如,%8.3f 将总共 8 位,小数点右侧 3 位,很像 C/C++ printf 格式字符串。
如果你总是想要 5 位小数,你可以使用:
"%.5f" % small_number
我会做这样的事情,这样你就可以去掉尾随的零:
puts ("%.15f" % small_number).sub(/0*$/,"")
不要超过 15,否则你会受到浮点数不精确的影响。
puts ("%.25f" % 0.01).sub(/0*$/,"")
0.0100000000000000002081668
这也适用于整数,修剪多余的零,并始终将数字作为有效的浮点数返回。为了清楚起见,这使用了sprintf
而不是更神秘的%
运算符。
def format_float(number)
sprintf('%.15f', number).sub(/0+$/, '').sub(/\.$/, '.0')
end
例子:
format_float(1) => "1.0"
format_float(0.00000001) => "0.00000001"