alert(12000*1.34); = 16080.000000000002
Собственно сабж в теме.
Или у меня не лады с математикой, или все калькуляторы врут, или что за фигня? |
Цитата:
используйте фиксы alert (0.3 - 0.2) alert( (0.3 - 0.2).toFixed(1) ) метод .toFixed() применяется к числу, и округляет его до нужно знака после запятой. принимает в себя число, количество знаков до которых округлять. правда возвращает он строку. так что потом придется еще и превращать это все в число. alert(typeof (0.3 - 0.2).toFixed(1)) alert(typeof parseFloat((0.3 - 0.2).toFixed(1))) alert(parseFloat((0.3 - 0.2).toFixed(1))) |
Благодарю, я как раз таки это число потом превращал в строку, теперь просто этой функцией и превращаю в строку =)
Так что за проблема у JS с умножением? Я теперь никаким его вычислениям не верю. |
Цитата:
по этому при вычислениях с дробными числами всегда есть погрешность.) |
var x = (12000 * 1.34).toFixed(4) - 0; alert(typeof x); alert(x); Цитата:
|
Цитата:
|
Я с этим со всем согласен, и знаю эти стандарты.
Однако все языки программирования используют этот стандарт, и я впервые встречаю такое поведение. Другие языки так себя не ведут. |
Цитата:
|
хмм,
<?php echo(12000*1.34); ?>16080 |
Цитата:
2) есть способ обходить эту неточность, вычислениями в столбик)) иными словами в памяти хранится не ДРОБНОЕ ЧИСЛО, а хранится что на что делить. и потом когда тебе нужно получить значение, ты просто указываешь точность и комп вычисляет столбиком))) 3) во многих языках стоит автофикс если тип числа и система счисления не указаны явно)) по этому ты и не замечаешь такого поведения) |
Часовой пояс GMT +3, время: 22:46. |