Я не вижу ничего подобного в Float. Float - это в основном оболочка для нативного типа double
, и учитывая обычные двоичные / десятичные ошибки, я не удивлен, что Float не позволяет вам манипулировать значащими цифрами.
Тем не менее, BigDecimal в стандартной библиотеке действительно понимает значащие цифры, но, опять же, я не вижу ничего, что позволяло бы вам напрямую изменять значащие цифры в BigDecimal: вы можете попросить об этом, но вы можете не меняй это. Но вы можете обойти это, используя безоперационную версию методов mult
или add
:
require 'bigdecimal'
a = BigDecimal.new('11.2384')
a.mult(1, 2) # the result is 0.11E2 (i.e. 11)
a.add(0, 4) # the result is 0.1124E2 (i.e. 11.24)
Второй аргумент этих методов:
Если указано и меньше количества значащих цифр результата, результат округляется до этого количества цифр в соответствии с BigDecimal.mode
.
Использование BigDecimal будет медленнее, но это может быть ваш единственный выбор, если вам нужен мелкозернистый элемент управления или если вы хотите избежать обычных проблем с плавающей запятой.