Установите точность отображения поплавка в Ruby - PullRequest
55 голосов
/ 19 декабря 2009

Можно ли установить точность отображения поплавка в Ruby?

Что-то вроде:

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

Или мне нужно переопределить to_s метод Float?

Ответы [ 4 ]

77 голосов
/ 07 августа 2012

z.round(2) или 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.

43 голосов
/ 19 декабря 2009

Вы можете использовать sprintf:

sprintf( "%0.02f", 123.4564564)
35 голосов
/ 20 декабря 2009

Обычно я просто выполняю преобразование в открытом коде, что-то вроде:

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

Ruby вызывает Ядро # format для таких выражений, как это, потому что String имеет основной оператор%, определенный . Думайте об этом как printf для Ruby , если это звонит вам в колокола.

0 голосов
/ 20 сентября 2017

Вы можете использовать путы

z = #{'%.3f' % z}
...