Я использую значения BigDecimal
в своем приложении, так как есть расчеты для товаров в корзине покупок, я читал, что для этого предпочтительнее BigDecimal
, по сравнению с целыми числами или поплавками?Обработка BigDecimal завершающего ноля Ruby
Существует один сценарий, к которому я бы хотел обратиться. Когда у меня есть это, например
amount = BigDecimal.new("28.99")
amount #=> #<BigDecimal:51d3120,'0.2899E2',18(18)>
amount.to_s #=> "28.99"
amount.to_f #=> 28.99
Который до сих пор ожидается поведение, но когда я делаю следующее
amount = BigDecimal.new("28.00") || amount = BigDecimal.new("28")
amount.to_s #=> "28.0"
amount.to_f #=> 28.0
Является ли это предназначено поведение? В моей дб я установить масштаб и точность
t.decimal :price, precision: 30, scale: 2
Когда у меня есть значение 28.00
сохраненной в базе данных я хотел бы показать, на мой взгляд 28.00
и не 28.0
Update
Просто пришел на этот пост на SO How to convert a ruby BigDecimal to a 2-decimal place string? решение будучи
v = BigDecimal("28.00")
v.truncate.to_s + '.' + sprintf('%02d', (v.frac * 100).truncate)
Я предполагаю, что это-я e единственный способ справиться с этим?
Так что эти сеттеры ? 'to_s' и т. д. – Smar
@Smar Я не уверен, что вы имеете в виду? каков твой вопрос? – Richlewis
Для 'v = BigDecimal (" 28.00 ")' 'sprintf ("%. 2f ", v)' должен давать '28.00' – eugen