2009-12-19 21 views
47

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

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

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

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

+0

Что 'x'? ... –

+0

К сожалению, x была опечаткой. –

+10

как насчет z.round (2), z.round (3)? – v4r

ответ

34

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

sprintf("%0.02f", 123.4564564) 
+4

Я предпочитаю это в те времена, когда мне нужен «.00», который 'round (2)' не дает. –

+9

Это любопытное занятие, я никогда не использовал рубин в своей жизни. Я не знаю, как писать приветственную программу мира и никогда не делал. Я, вероятно, просто искал вопрос о OP и отправил ответ. –

+0

'puts" Привет, мир "' - Ха-ха! Теперь вы знаете, как написать привет мирскую программу! –

32

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

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

Рубин называет Kernel#format выражений, как это, потому что строка имеет core operator % defined в теме. Подумайте об этом как printf для Ruby, если это звонит вам.

+8

Может ли кто-нибудь объяснить это? – you786

+0

Отметьте 'Kernel # format'. – maletor

+0

Этот человек дал мне ведущий космический персонаж. Я использовал ответ Андреаса, и он сделал это без космического персонажа. Я не мог понять документацию по этому поводу, иначе я бы объяснил, почему lol –

59

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.

+1

FYI, это было добавлено в Ruby 1.9.2, поэтому он не будет работать с более ранними версиями – nbarraille

+1

+1 для примечания о '(0.25). раунд (3) 'не уступающий' 0.250' См. ответ Андреаса Бонини для этого. –

0

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

z = #{'%.3f' % z} 
Смежные вопросы