Автокликер Clickermann :: Форум

Основной раздел => Ошибки => Topic started by: TNT on November 13, 2023, 03:53:05 PM

Title: Ошибка при вызове вункции ROUND()
Post by: TNT on November 13, 2023, 03:53:05 PM
(https://i.playground.ru/p/fzTo6Q0xb_2Lva3f_fTA5w.png)
Кусок кода:
Code: [Select]
print($n)
$n=ROUND($n)+1
Выводит значение $n=94.33333333333
Title: Re: Ошибка при вызове вункции ROUND()
Post by: Vint on November 13, 2023, 05:39:53 PM
(https://i.playground.ru/p/fzTo6Q0xb_2Lva3f_fTA5w.png)

А что должно быть? Round принимает два параметра, где второй?
Code: (clickermann) [Select]
$n = ROUND($n, 0)
Title: Re: Ошибка при вызове вункции ROUND()
Post by: TNT on November 14, 2023, 08:25:13 PM
Если бы ROUND() всегда требовал второй параметр, то вопрос бы не возник, но в подавляющем большинстве случаев он прекрасно работает без него.
Title: Re: Ошибка при вызове вункции ROUND()
Post by: Vint 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 - ошибка исчезнет. Это и есть недокументированное свойство. Ну и что, иногда может проскочить без что второго параметра, вот случай когда не прокатило. И сколько ещё таких случаев может быть.