глючит умножение
S = (0.05*14)+(0.1*2) D = (0.1*14)/2+(0.1*2) alert( 'S = ' + S + '\n' + 'D = ' + D ) результат в обоих случаях явно должен быть не такой как сейчас: 0.9000000000000001 Как добится нормальной арифметики от JavaScript? |
Никак, округляйте.
|
Компьютеры плохо дружат с нецелыми числами. Нормальной арифметики можно добиться только для целых чисел.
Если Вы хотите вывести нецелое число в более-менее приличном виде, обрезайте его вывод до нескольких знаков после запятой (см. Number.prototype.toFixed) |
Цитата:
|
Должно и это не только в javascript.
Если хотите углубиться то вот, может поможет. |
S = (0.05*100*14)/100+(0.1*100*2)/100 D = (0.05*14)+(0.1*2) alert( 'S = ' + S + '\n' + 'D = ' + D ) И так не получается добиться правильного (точного) результата: все вокруг да около получается. |
Да, и как я могу прибегать к округлению, когда не понятно (исходя из предыдущего примера) где JS добавит или сбавит количество?!
|
Цитата:
alert(020 === 16) |
т.к. судя по всему точность в javascript гарантирована лишь для целых чисел, то лично я пошел кривым путем - перевел исходные числа в строковое представление, затем убрал запятую (разумеется, запомнил количество десятичных знаков), преобразовал обратно в число (на сей раз целое) и произвел необходимые математические действия, затем опять преобразовал в строку, разобрался с количеством знаков после запятой и преобразовал в число. Конечно это сплошной гемор, но мне нужна была гарантия правильности... в общем пока работает в т.ч. и на тех же данных, которые при обычных методах вычисления давали весьма серьезную погрешность...
|
Часовой пояс GMT +3, время: 00:00. |