parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

MoKo 20.01.2014 06:47

Для истории предложу и такой вариант:
@print[n]
^if(^math:abs($n)>1000000000000000){
    $result[^n.format[%.0f]]
}(^math:abs($n<0.0001)){
    $result[^n.format[%.32f]]
    $result[^result.trim[right;0]]
    $result[^result.trim[right;.]]
}{
    $result[$n]
}
Но у печати в "человеческом" виде double, который на самом деле предназначен для хранения чисел в экспоненциальной форме есть и свои минусы. Скажем $n(1e37) и результат работы метода ^print($n) вам уже не очень понравится (и связан он с тем, что у double 17 значащих цифр, а не 37). Плюс большие числа, скажем 1e300 уже не поддерживаются (да и едва ли кто-то готов считать 300 нулей).

С другой стороны, задача частая и возможно имеет смысл сделать какой-нибудь встроенный формат, который выводил бы double схожим образом.