Как сделать "красивое округление"? - PullRequest
8 голосов
/ 16 августа 2010

Мне нужно сделать округление, подобное этому, и преобразовать его в символ:

as.character(round(5.9999,2))

Я ожидаю, что оно станет 6.00, но это просто даст мне 6

В любом случае, я могу заставить его показать 6.00?

Ответы [ 3 ]

10 голосов
/ 16 августа 2010

Попробуйте воспользоваться одним из следующих способов:

> sprintf("%3.2f", round(5.9999, digits=2))
[1] "6.00
> sprintf("%3.2f", 5.999)  # no round needed either
[1] "6.00

Также есть formatC() и prettyNum().

2 голосов
/ 18 августа 2010

Чтобы объяснить, что происходит - вызов round(5.9999, 2) округляет ваш номер до ближайшего сотого места, что дает вам число (не строка) очень близко к (или точно равно, если вам повезло с представлениями с плавающей точкой) 6.00. Затем as.character() смотрит на это число, берет до 15 значащих цифр (см. ?as.character), чтобы представить его с достаточной точностью, и определяет, что необходима только 1 значащая цифра. Так вот, что вы получаете.

0 голосов
/ 26 июня 2017

Как указал Дирк, formatC () - еще одна опция.

формат C (x = 5,999, цифры = 2, формат = 'f')

...