>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >арифметическая ошибка http://forum.mozilla-russia.org/viewtopic.php?id=31876 |
patt > 01-03-2009 02:05:10 |
почему такой код выдаёт такое число : 14.399999999999999 ? |
Infocatcher > 01-03-2009 02:41:11 |
Это все от округления при вычислениях. http://javascript.ru/ecmascript/part4#a-4.3.20 01-03-2009 02:45:04 |
Shura > 01-03-2009 09:54:23 |
А в названии темы - орфографическая |
patt > 01-03-2009 19:25:22 |
получается что обычный калькулятор - непосильная задача для js? или есть какие то решения? |
Shura > 02-03-2009 10:24:14 |
patt |
Lynn > 02-03-2009 15:37:18 |
Учить матчасть |
Forest > 03-03-2009 00:16:47 |
patt пишет
Вообще-то , а в силу конечности регистров (и памяти) компьютеров получаем и
Если же нужна математическая точность, то и программы для этого надо использовать математические |
Infocatcher > 03-03-2009 01:13:06 |
Forest |
patt > 03-03-2009 11:20:58 |
Shura пишет
я в курсе, что такая проблема есть, но то, что обычные проценты по вкладам js посчитает не правильно было сюрпризом ) другие языки с этой проблемой справились, перед там, как запостить тему проверил на java и php. |
alex_past > 03-03-2009 12:48:41 |
patt пишет
js посчитал правильно. Попробуйте написать 14.4 в шестнадцатиричном (или двоичном) виде и увидите, в чем грабли или то же, но сдвигами влево-вправо. Или так, скажем: Выделить код Код:var x=число, которое мы округляем. var n=число знаков после запятой, которое нам надо получить. var s; // тут будет строковое представление числа, готовое для вывода с нужной точностью s=String(Math.round(x*Math.pow(10, n))); s=s.substr(0,s.length-n)+"."+s.substr(s.length-n-1); Надо нам три знака после запятой - забиваем n=3; x=14.399999999 |
patt > 04-03-2009 18:52:37 |
alex_past пишет
заказчик почему то с вами не согласился p.s. Всем спасибо за подробное объяснение проблемы и вариантов решения. |
Forest > 05-03-2009 23:15:37 |
patt
Эта проблема к языкам имеет мало отношения, так как как правило проблема именно в МАШИННОМ округлении. |