LINUX.ORG.RU

Чем в racket округлить до сотых (десятых, тысячных)?

 ,


0

1

Глупый вопрос, но мне надоели костыли с round, умножением и делением просто для того, вывести (например) 0.75, который почему-то превращается в 0.75000000000005 (количество нулей может не соответствовать действительности).

Если вопрос не про вывод на экран, а про потерю точности, то лучше использовать точную арифметику. (rationalize (inexact->exact x) 1/100) даст наиболее близкое к x рациональное число, отстоящее от него не более, чем на 1/100.

monk ★★★★★
()
Ответ на: комментарий от monk

вау! Для вывода, впрочем, действительно не подходит, ибо при попытке использования exact->inexact получаются ещё более ужасные вещи вроде 0.07407407407407407.

sevenredlines
() автор топика
Ответ на: комментарий от sevenredlines

Для вывода, впрочем, действительно не подходит

Для вывода, как уже сказали, есть real->decimal-string

А exact очень удобен, когда надо посчитать какое-нибудь достаточно сложное математическое выражение (или даже просто сумму элементов в массиве, когда элементов очень много) и не хочется сочинять порядок вычислений, при котором погрешность минимальна.

К слову, для вывода в inexact переводить не надо

> (real->decimal-string 3/4 4)
"0.7500"

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.