Почему делает sprintf Perl не круглые числа с плавающей точкой правильно?

Действительно ли ссылка игры является ссылкой на фактический mp3 файл или на некоторый код JavaScript, который открывается плеер?

, Если последний, можно легко добавить собственный код входа там для отслеживания количества хитов к нему.

, Если первый, Вам будет нужно что-то, что может отследить сам журнал веб-сервера и сделать то различие. Мой план хостинга идет с webalizer, который делает это приятно.

5
задан brian d foy 1 November 2009 в 11:58
поделиться

2 ответа

Вас укусил тот факт, что числа с плавающей запятой не являются точным представлением десятичных дробей. Вот что я получаю:

  DB<1> $a=0.335

  DB<5> print sprintf("%.19f",$a)
0.3350000000000000200
  DB<7> $b=1.335

  DB<8> print sprintf("%.19f",$b)
1.3349999999999999645
  DB<9> 

Поскольку 0,335 внутренне представлено как немного больше 0,335, оно округляется до 0,34, а 1,335 немного МЕНЬШЕ, чем 1,335, поэтому округляется до 1,33.

16
ответ дан 18 December 2019 в 07:09
поделиться

Это функция чисел с плавающей запятой IEEE.

Для получения дополнительной информации в контексте Perl см. Perlfaq4 «Есть ли в Perl функция round ()» и, в частности, что в нем говорится о чередовании промежуточных точек.

6
ответ дан 18 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: