Вопрос по javascript – JavaScript с добавлением десятичных чисел [дубликаты]

46

This question already has an answer here:

Поэтому я делаю сценарий, который добавляет два числа (десятичные числа) вместе, что я столкнулся с проблемой.

http://jsfiddle.net/DerekL/esqnC/

Я сделал сценарий, получается довольно хорошо:

0.1 + 0.5  //0.6
0.2 + 0.3  //0.5

Но скоро я увижу:

0.1 + 0.2  //0.30000000000000004
0.01 + 0.06  //0.06999999999999999

И это не выглядит правильным для меня. Я знаю, что это недостаток использования плавающей запятой с конечными битами, но я не могу найти способ исправить это.

Math.ceil   //No
Math.floor  //No
.slice      //No

UPDATE

Можно ли сначала умножить числа на 1000, а затем сложить их, а затем разделить на 1000?

Error: User Rate Limit Exceeded Kru
Math.round(0.1 + 0.2)Error: User Rate Limit Exceeded Gazler
Error: User Rate Limit Exceededwhat is the expected output? kapa
Error: User Rate Limit Exceeded Derek 朕會功夫
Math.round()? kapa

Ваш Ответ

4   ответа
4

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededtoFixedError: User Rate Limit ExceededparseFloat.

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

function roundNumber(number, decimals) {
    var newnumber = new Number(number+'').toFixed(parseInt(decimals));
    return parseFloat(newnumber); 
}

0.1 + 0.2;                    //=> 0.30000000000000004
roundNumber( 0.1 + 0.2, 12 ); //=> 0.3
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededjsfiddle.net/49HGP/6Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded10000000000000.126 == 10000000000000.127 // true
Error: User Rate Limit Exceeded11200030006000.125 + 0.001 = 11200030006000.127Error: User Rate Limit Exceeded
5

function add(){
    var first=parseFloat($("#first").val());
    var second=parseFloat($("#second").val());
    $("#result").val(+(first+second).toFixed(2));
}

DEMO.

46

Error: User Rate Limit ExceededtoFixedError: User Rate Limit Exceeded

+(0.1 + 0.2).toFixed(12) // 0.3

Error: User Rate Limit ExceededtoFixedError: User Rate Limit Exceeded

Math.round((0.1 + 0.2) * 1e12) / 1e12
Error: User Rate Limit ExceededtoFixedError: User Rate Limit Exceeded Derek 朕會功夫
Error: User Rate Limit ExceededtoFixedError: User Rate Limit Exceededjsfiddle.net/KooiInc/D7ULx
Error: User Rate Limit ExceededMath.round()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededjsfiddle.net/esqnC/5
Error: User Rate Limit ExceededMath.round((0.1 + 0.2) * 1e12) / 1e12
4

Error: User Rate Limit Exceeded

var arr = [1234563995.721, 12345691212.718, 1234568421.5891, 12345677093.49284];

var sum = 0;
for( var i = 0; i < arr.length; i++ ) {
    sum += arr[i];
}

alert( "fMath(sum) = " + Math.round( sum * 1e12 ) / 1e12 );
alert( "fFixed(sum) = " + sum.toFixed( 5 ) );

Conclusion

Error: User Rate Limit ExceededMath.round( (## + ## + ... + ##) * 1e12) / 1e12

Error: User Rate Limit Exceeded( ## + ## + ... + ##).toFixed(5) )

Error: User Rate Limit ExceededtoFixedError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы