Как я могу увеличить количество десятичных цифр при преобразовании BigDecimal в String? - PullRequest
5 голосов
/ 17 февраля 2012

У меня проблема с BigDecimal.

Этот код:

x = BigDecimal.new('1.0') / 7
puts x.to_s

выходы:

0.142857142857142857E0

Я хочу увеличить количество цифр.

В JAVA я мог бы сделать:

BigDecimal n = new BigDecimal("1");
BigDecimal d = new BigDecimal("7");

n = n.divide(d,200, RoundingMode.HALF_UP);

System.out.println(n);

Вывод:

0.1428571428571428571428571428571428571428571428571428571428... (200 digits)

Я посмотрел документацию BigDecimal и попытался установить цифры при создании экземпляра числа, затем попытался установить предел с помощью BigDecimal.limit, но я не смог напечатать более 18 цифр. 1019 *

Чего мне не хватает?

Я использую ruby ​​1.9.3p0 (2011-10-30) [i386-mingw32] в Windows 7 64 бит

Ответы [ 2 ]

7 голосов
/ 17 февраля 2012

Метод div позволяет указать цифры:

x = BigDecimal.new('1.0').div( 7, 50 )
puts x

В результате:

0.14285714285714285714285714285714285714285714285714E0
0 голосов
/ 17 февраля 2012

Несмотря на внутреннее представление большого десятичного числа, метод to_s отвечает за преобразование его в строку. Я вижу, что to_s поддерживает строку формата:

Converts the value to a string.

The default format looks like 0.xxxxEnn.

The optional parameter s consists of either an integer; or an optional ‘+’ or ‘ ’, followed by an optional number, followed by an optional ‘E’ or ‘F’.

If there is a ‘+’ at the start of s, positive values are returned with a leading ‘+’.

A space at the start of s returns positive values with a leading space.

If s contains a number, a space is inserted after each group of that many fractional digits.

If s ends with an ‘E’, engineering notation (0.xxxxEnn) is used.

If s ends with an ‘F’, conventional floating point notation is used.

Examples:

BigDecimal.new('-123.45678901234567890').to_s('5F') -> '-123.45678 90123 45678 9'

BigDecimal.new('123.45678901234567890').to_s('+8F') -> '+123.45678901 23456789'

BigDecimal.new('123.45678901234567890').to_s(' F') -> ' 123.4567890123456789'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...