2013-03-19 3 views
1

Я пытаюсь перемещать десятичные знаки вокруг числа. У меня есть следующая настройка.Ошибка округления математики в javascript

dividend = 9130.124; 
numFactor = 1; 
dividend = (dividend * Math.pow(10, numFactor)); 

я получаю следующий результат

91301.23999999999 

Я думал, что я хотел бы получить что-то вроде

91301.24 

Если я изменяю дивиденды 9130.123

я получаю правильный ответ 91301.23

Есть ли способ обойти это или я что-то пропустил?

+1

воспользуйтесь этим, чтобы получить результат .. Math.round (divend * 100)/100 – Rinku

+0

Я думаю, что Уэсли хочет переместить десятичные знаки вокруг числа. Все ответы касались округления до фиксированного числа знаков после запятой – Sharun

ответ

1

Это потому, что ваш дивиденд 9130,12399999 ... Так что вы должны использовать divided.toFixed() перед изменением ..

dividend = 9130.12399999 
dividend.toFixed(3); // here dividend will be 9130.124 
numFactor = 1; 
dividend = (dividend * Math.pow(10, numFactor)); 

вы получите 91301,24

1
dividend=9130.124; 
numFactor=1; 
dp=3; 
dividend = (dividend * Math.pow(10,numFactor)); 
dividend = Math.round(dividend * Math.pow(10,dp) + 0.5)/Math.pow(10, dp) 
0

Вы также можете использовать Big.js, которая является произвольной точности математической библиотеки для JavaScript.

Тогда ваш code becomes:

var dividend = new Big("9130.124"); 
dividend = dividend.times(new Big(""+Math.pow(10,1))); 
console.log(dividend); 
0

Попробуйте это:

dividend = 9130.124345; 
    dividend = dividend.toString(); 
    numFactor = 2;//can be changed as u need 


    var indx = dividend.indexOf('.'); 


    dividend = dividend.replace(/\./g, "");//remove . 
    dividend = dividend.substring(0, indx + numFactor) + '.' + 
         dividend .substring(indx + numFactor, dividend.length); 

Прекрасно работает с любым значением для numFactor. И нет необходимости в дополнительных библиотеках

Смежные вопросы