Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.02.2012, 14:39
Аватар для Скриптор
Аспирант
Отправить личное сообщение для Скриптор Посмотреть профиль Найти все сообщения от Скриптор
 
Регистрация: 05.02.2010
Сообщений: 35

глючит умножение
S = (0.05*14)+(0.1*2)
D = (0.1*14)/2+(0.1*2)
 
alert( 'S = ' + S + '\n'  +
     'D = ' + D 
)

результат в обоих случаях явно должен быть не такой как сейчас: 0.9000000000000001

Как добится нормальной арифметики от JavaScript?

Последний раз редактировалось Скриптор, 03.02.2012 в 14:42.
Ответить с цитированием
  #2 (permalink)  
Старый 03.02.2012, 14:50
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Никак, округляйте.
__________________
.
Ответить с цитированием
  #3 (permalink)  
Старый 03.02.2012, 14:52
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Компьютеры плохо дружат с нецелыми числами. Нормальной арифметики можно добиться только для целых чисел.

Если Вы хотите вывести нецелое число в более-менее приличном виде, обрезайте его вывод до нескольких знаков после запятой (см. Number.prototype.toFixed)
Ответить с цитированием
  #4 (permalink)  
Старый 03.02.2012, 14:53
Аватар для Скриптор
Аспирант
Отправить личное сообщение для Скриптор Посмотреть профиль Найти все сообщения от Скриптор
 
Регистрация: 05.02.2010
Сообщений: 35

Сообщение от Skipp Посмотреть сообщение
Никак, округляйте.
Проверьте вручную или на калькуляторе: откуда там единица на конце маячит? Не должно её там быть!
Ответить с цитированием
  #5 (permalink)  
Старый 03.02.2012, 15:04
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Должно и это не только в javascript.
Если хотите углубиться то вот, может поможет.
__________________
.
Ответить с цитированием
  #6 (permalink)  
Старый 03.02.2012, 15:32
Аватар для Скриптор
Аспирант
Отправить личное сообщение для Скриптор Посмотреть профиль Найти все сообщения от Скриптор
 
Регистрация: 05.02.2010
Сообщений: 35

S = (0.05*100*14)/100+(0.1*100*2)/100
D = (0.05*14)+(0.1*2)

alert( 'S = ' + S + '\n'  +
     'D = ' + D 
)

И так не получается добиться правильного (точного) результата: все вокруг да около получается.
Ответить с цитированием
  #7 (permalink)  
Старый 03.02.2012, 15:34
Аватар для Скриптор
Аспирант
Отправить личное сообщение для Скриптор Посмотреть профиль Найти все сообщения от Скриптор
 
Регистрация: 05.02.2010
Сообщений: 35

Да, и как я могу прибегать к округлению, когда не понятно (исходя из предыдущего примера) где JS добавит или сбавит количество?!
Ответить с цитированием
  #8 (permalink)  
Старый 03.02.2012, 15:56
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Сообщение от Maxmaxmaximus
т.е. не является десятичным.
т.е является восьмеричным

alert(020 === 16)
__________________
readOnly
Ответить с цитированием
  #9 (permalink)  
Старый 04.02.2012, 14:52
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 181

т.к. судя по всему точность в javascript гарантирована лишь для целых чисел, то лично я пошел кривым путем - перевел исходные числа в строковое представление, затем убрал запятую (разумеется, запомнил количество десятичных знаков), преобразовал обратно в число (на сей раз целое) и произвел необходимые математические действия, затем опять преобразовал в строку, разобрался с количеством знаков после запятой и преобразовал в число. Конечно это сплошной гемор, но мне нужна была гарантия правильности... в общем пока работает в т.ч. и на тех же данных, которые при обычных методах вычисления давали весьма серьезную погрешность...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает умножение IE allenn Internet Explorer 1 14.02.2011 19:47
страница жутко глючит в IE bushstas Оффтопик 2 02.02.2011 22:38
анимированное меню на jquery глючит в ie leCadavreExquis jQuery 3 30.12.2009 17:30
глючит marquee с innerHTML EDbKA AJAX и COMET 6 14.08.2009 12:15
DreamWeaver глючит. SunYang Общие вопросы Javascript 11 04.06.2008 12:18