Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   1092*0.15=? А на javascript? Как это объяснить бухгатеру? (https://javascript.ru/forum/misc/5506-1092%2A0-15%3D-na-javascript-kak-ehto-obyasnit-bukhgateru.html)

oid 20.10.2009 00:34

1092*0.15=? А на javascript? Как это объяснить бухгатеру?
 
Накопилась пара интересных эффектов при использовании "великого и могучего". Может кто-нибудь подскажет как это забороть или убедит, что так, мол, и должно быть.

Эффект первый в заголовке. Почему только в .js это выражение дает результат равный 163.79999999999998?

Эффект второй. Так никто не делает (можно просто отнять 0), но все же: parseInt("01") вернет 1, parseInt("02") вернет 2 и т.д. до parseInt("08") вернет ... нет не 8. Так же как и parseInt("09")...

Octane 20.10.2009 00:51

http://javascript.ru/basic/types#number

oid 20.10.2009 10:26

Octane, спасибо, но как жить дальше с неточными вычислениями :(

ZoNT 20.10.2009 12:48

http://www.webmaster.ee/javascript/J....html#parseInt

Kolyaj 20.10.2009 13:36

Я вот только не понял, зачем бухгалтеру это объяснять?

e1f 20.10.2009 14:27

oid, попробуйте 10.92*15 ;)

Riim 20.10.2009 14:35

Цитата:

Сообщение от oid
но как жить дальше с неточными вычислениями

хранить все цифры в виде строк и вручную делать некоторые операции (вспоминаем как в школе методом столбика умножали/делили).

oid 20.10.2009 16:40

Да чего уж "некоторые операции столбиком", похоже все арифметические как минимум... Это мега-круто... нет слов...
"А что Вы делаете?"
"Да тут компьютер немного неточно 0.1+0.2 вычисляет, надо библиотечку дописать..."
"Да идите вы нах.р со своим компьютером, web-технологиями и прочей х...й "
Ради прикола наберите в поисковике "javascript калькулятор", потестите результаты, я плакаль :(

Riim 20.10.2009 20:37

В некоторой степени это есть во всех языках программирования.

x-yuri 21.10.2009 05:34

практически во всех, потому что так считает процессор и для всего, кроме финансовых расчетов, это подходит

e1f 21.10.2009 15:08

x-yuri,
а почему для финансовых-то не пожходит? Это в расчете интеграла с мелким шагом нужна точность, а ТС'у хватит
(1092*0.15).toFixed(2)

Kolyaj 21.10.2009 15:09

e1f,
денег потом не досчитаешься. Во всех программах для денег используют специальный тип данных, считающий с точностью до двух знаков.

oid 23.10.2009 11:18

И первое и второе число, в моем случае вводит бухгалтер, точность и первого и второго может быть до 4 знаков после запятой. Проблему временно обошел приведением исходных чисел к целым, после выполнения операции восстанавливаю дробную часть... Но осадок остался...

oid 23.10.2009 11:22

Идея отсюда:
http://www.petting-zoo.org/Calculator.html

x-yuri 23.10.2009 12:15

а еще можно ajax-запрос отправлять на сервер, сервер-то умеет точно считать, в крайнем случае можно mysql попросить :lol:

и еще вот

oid 24.10.2009 12:51

про ajax на каждое изменение фокуса ввода прикольно :lol:


Часовой пояс GMT +3, время: 18:26.