Проблема с вычитанием в javascript
От: OlegL Россия  
Дата: 12.01.04 07:34
Оценка:
Почему
b = 100 — 91.02;
выдаёт b = 8.980000000000004 ?
Как от этого избавиться?
Re: Проблема с вычитанием в javascript
От: Дм.Григорьев  
Дата: 12.01.04 07:46
Оценка:
Здравствуйте, OlegL, Вы писали:

OL>Почему

OL>b = 100 — 91.02;
OL>выдаёт b = 8.980000000000004 ?

Потому что большинство десятичных дробей не переводятся в двоичные без потерь.

OL>Как от этого избавиться?


Если в JS нет классов точной математики, то вот так:
a=100, b=91.02, c=(a*100 — b*100) / 100.
Но при делении на 100 может снова вылезти ошибка.
Если это у тебя деньги, храни их в копейках.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re: Проблема с вычитанием в javascript
От: Аноним  
Дата: 12.01.04 07:55
Оценка:
Здравствуйте, OlegL, Вы писали:

OL>Почему

OL>b = 100 — 91.02;
OL>выдаёт b = 8.980000000000004 ?
OL>Как от этого избавиться?

Это не javascript виноват а ограниченная точность представления плавающих чисел.
Вот две строчки на С

double a, b, c;
a = 100; b = 91.02; c = a — b;
printf( "%25.20f %25.20f %25.20f\n", a, b, c );

а в результате:

100.00000000000000000000 91.01999999999999600000 8.98000000000000400000
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.