2013-05-19 3 views
4

Конструктор BigDecimal принимает необязательные второй параметр, который указывает цифры точности объекта. от ruby-doc:Как определить параметры точности с помощью String в конструкторе BigDecimal?

новые (начальные цифры),

Число значащих цифр, как Fixnum. Если опущено или 0, количество значащих цифр определяется из начального значения .

Однако при работе со строкой это поведение не соответствует описанию.

BigDecimal.new('1.2345', 4).to_s('F') 
# 1.2345 
BigDecimal.new('1.2345', 1).to_s('F') 
# 1.2345 

Как указать точность с помощью BigDecimal при работе с параметром String?

+0

, как вы получили результат, как '# 1.2345'? Я вижу '# ' для 'BigDecimal.new ('1.2345', 4)'. –

+0

Используйте 'to_s ('F')' для печати в формате float. – steveyang

+0

Вы должны показать, что в своем посте, поскольку вы делаете больше, чем вы явно говорите, а затем говорите, что вы смущены, когда то, что вы показываете, не то, что вы делаете, чтобы получить результаты. – vgoff

ответ

0

Простое решение будет BigDecimal.new('1.2345'.to_f, 1)

2

BigDecimal не принимает точность параметров со значением строки.

правильный подход:

BigDecimal.new("1020.567").round(2) => 1020.57 

Неправильный подход:

BigDecimal.new(1020.567, 2) => 1000.0 
Смежные вопросы