результат суммы - PullRequest
       18

результат суммы

1 голос
/ 02 марта 2010

Почему 9,1 + 3,3 не 12,4?

<script>

  alert( 9.1 + 3.3 )

</script>

результат: 12.399999999

... а как мне его сложить?

Ответы [ 7 ]

2 голосов
/ 02 марта 2010

Попробуйте

alert((9.1 + 3.3).toFixed(1));

Метод toFixed () форматирует число для использования указанного числа конечных десятичных знаков.

Число округляется в большую сторону, и после десятичной точки (если необходимо) добавляются нулевые значения для создания требуемой десятичной длины.

2 голосов
/ 02 марта 2010

Это наследие JavaScript-стандарта IEEE 754, преследующее вас и любого другого разработчика JavaScript.

Посмотрите презентацию Крокфорда , и вы получите лучшее понимание

А что касается того, как: вы должны превратить свои десятичные дроби в целые числа, умножив их, и в конце превратить их обратно в десятичные дроби.

2 голосов
/ 02 марта 2010

Это от точности числа с плавающей запятой. Эта проблема возникает с каждым языком программирования и вызвана тем, что действительное число может иметь неограниченное количество цифр. Так что это всегда дается с точностью.

Вы можете попробовать: Number(9.1+3.3).toPrecision(3)

2 голосов
/ 02 марта 2010

Это ошибка с плавающей запятой, когда переменная не может точно хранить значение. Если вы работаете только с одним десятичным знаком, то вы можете умножить все свои цифры на 10, чтобы выполнить вычисления, так как все числа останутся целыми числами, и вы не должны понимать проблему, которую видите. Очевидно, что при отображении числа вам придется разделить его на 10.

0 голосов
/ 02 марта 2010

Используйте функцию Math.round для округления значений.

оповещения (Math.round (9,1 + 3,3));

0 голосов
/ 02 марта 2010

Причина - число с плавающей запятой. Вы можете иметь метод для округления числа до желаемых мест после десятичной дроби.

<script language="javascript">

function formatNumber(myNum, numOfDec)
{
var decimal = 1
for(i=1; i<=numOfDec;i++)
decimal = decimal *10

var myFormattedNum = (Math.round(myNum * decimal)/decimal).toFixed(numOfDec)
return(myFormattedNum)
}
</script> 
0 голосов
/ 02 марта 2010

Интересно, что, поменяв значения, вы получите правильный результат!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...