Проблема округления чисел с плавающей запятой в WebSoft HCM
Всем привет, кто-нибудь из разрабов WS может объяснить такое поведение?
Как костыль, наверно такой вариант подойдёт
function roundToDigit(num, digit) {
var multiplier = 1 / digit;
return Math.round(num * multiplier) / multiplier;
}
alert(roundToDigit(8.35,0.1))
alert(roundToDigit(8.345,0.01))
мб округляет?
Я для этих целей всегда StrRealFixed использую Проверил на вашем примере - корректно работает
strrealfixed тоже самое выдает
причем это скорее всего ошибка при вычислении с плавающей запятой, т.к. StrReal(8.55, 1) выдает правильно значение = 8.6
хм точно а если на сервере агент?
аналогично
веб-админка, или на сервере/десктопе?
везде
тема гуглится как особенности округления чисел с плавающей точкой
Поэтому на обычном js юзаю Intl.NumberFormat
в js есть Math.floor, Math.ceil, Math.round fround, f16round
А какая тут магия. В сишном коде sprintf, в браузере - toFixed. А как они сработают - так и сработают. Почему в WS должно быть по другому - ХЗ...
Ну тогда как правильно округлять?
Хорошо, не будем Понять бы какую функцию правильно было применить здесь, чтобы 8.4 и 8.35 получить Мы ж без наезда, Андрей Заказчикам же не объяснишь про правила математики, когда например в результате процедуры оценки кто-то премию не получил
дак вам же скажут (например, я): дак это же не тот js. Где тогда другие функции оттуда?))
пока ограничились малым костылем StrReal(num + 0.00001, 1)
но есть побочка - течет кровь из глаз
А вот это что ли не рабочая схема? Должно же вроде.
А в других языках все хорошо?
нет. ведь эта проблема с плавающей точкой не на уровне языка, а эвм в целом
ну в шарпах при округлении я такого не встречал
Math.Round вроде тоже имеет конфиги для уточнения < 5 >

