浮点数-在Ruby中设置浮点数的显示精度

是否可以在Ruby中设置浮点数的显示精度?

就像是:

z = 1/3
z.to_s    #=> 0.33333333333333
z.to_s(3) #=> 0.333
z.to_s(5) #=> 0.33333

还是我必须重写Floatto_s方法?

salt.racer asked 2019-11-15T12:41:35Z
4个解决方案
79 votes

0.25.round(3)x.round(3)是最简单的解决方案。 参见[http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round。]

就是说,那只会确保它不超过这么多数字。 在1/3的情况下很好,但是如果您说0.25.round(3),您将得到0.25,而不是0.250。

DrewB answered 2019-11-15T12:42:10Z
43 votes

您可以使用sprintf:

sprintf( "%0.02f", 123.4564564)
Thomas Bonini answered 2019-11-15T12:42:36Z
35 votes

我通常只用开放代码进行转换,例如:

puts "%5.2f" % [1.0/3.0] 

Ruby为这样的表达式调用Kernel#format,因为String在其上定义了一个核心运算符%。 如果这对您有帮助,请将其视为Ruby的printf。

DigitalRoss answered 2019-11-15T12:43:11Z
0 votes

您可以使用看跌期权

z = #{'%.3f' % z}
Lucas Alencar answered 2019-11-15T12:43:38Z
translate from https://stackoverflow.com:/questions/1933958/set-the-display-precision-of-a-float-in-ruby