Author Topic: Ошибка при вызове вункции ROUND()  (Read 2258 times)

0 Members and 1 Guest are viewing this topic.

TNT

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Ошибка при вызове вункции ROUND()
« on: November 13, 2023, 03:53:05 PM »

Кусок кода:
Code: [Select]
print($n)
$n=ROUND($n)+1
Выводит значение $n=94.33333333333

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ошибка при вызове вункции ROUND()
« Reply #1 on: November 13, 2023, 05:39:53 PM »


А что должно быть? Round принимает два параметра, где второй?
Code: (clickermann) [Select]
$n = ROUND($n, 0)


TNT

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Re: Ошибка при вызове вункции ROUND()
« Reply #2 on: November 14, 2023, 08:25:13 PM »
Если бы ROUND() всегда требовал второй параметр, то вопрос бы не возник, но в подавляющем большинстве случаев он прекрасно работает без него.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ошибка при вызове вункции ROUND()
« Reply #3 on: November 15, 2023, 09:01:04 AM »
Если бы ROUND() всегда требовал второй параметр, то вопрос бы не возник, но в подавляющем большинстве случаев он прекрасно работает без него.

В этом опасность всех недокументированных свойств. В справке чётко написано
Quote
Синтаксис
ROUND (arg, prec)

Параметры
arg - число
prec - точность
Два! параметра. prec не указан опциональным, он обязательный.

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

Пример
Code: (clickermann) [Select]
$n = 94.33333333333
print($n)
$n = ROUND($n)
print($n)

HALT
выдаёт ошибку. Если убрать принт который до round - ошибка исчезнет. Это и есть недокументированное свойство. Ну и что, иногда может проскочить без что второго параметра, вот случай когда не прокатило. И сколько ещё таких случаев может быть.