|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Michael Kichanov 2:5020/400 02 Jun 2000 18:13:43 To : All Subject : s?printf --------------------------------------------------------------------------------
Hi, All!
Столкнулся с проблемой округления функциями s?printf и format'ным выводом.
когда то раньше уже это проходил и решал, но совершенно не помню как :(
например,
sprintf("%.2f", 1.555) == 1.55 (хотя должноб быть 1.56)
sprintf("%.2f", 0.555) == 0.56 (тут нормально)
при увеличении точности до 20 знаков после запятой видно
sprintf("%.20f", 1.555) == 1.55499999999999993783
что все и объясняет.
но число то 1.555 задано с явной точностью, и очень уж охота чтоб
и округлялось оно явно :)
понятно, что форматный вывод готовит не сам перл,
а низлежащие библиотеки, но все же...
я извратился так:
$f = 1.555;
$f = sprintf("%.3f", $f) * 1000;
$f = $f%10 >= 5 ? (int($f/10)+1)/100 : int($f/10)/100;
$f_rounded = sprintf("%.2f", $f); # == 1.56
но может есть более красивый выход или я вобче плутаю в зазеркалье?
mike
--- ifmail v.2.15dev5
* Origin: Internet-Arkhangelsk Company (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/44181da7be2a.html, оценка из 5, голосов 10
|