Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 s?printf   Michael Kichanov   02 Jun 2000 18:13:43 
Архивное /ru.perl/44181da7be2a.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional