簡體   English   中英

如何對2個數字求和而不取整

[英]How to sum 2 numbers witout rounding

我有2個號碼

a = 1548764548675465486;
b = 4535154875433545787;

當我對這些數字求和時,四舍五入到四舍五入

a => 1548764548675465500
b => 4535154875433545700

a + b返回6083919424109011000而應返回6083919424109011273

有沒有使用庫就可以解決此問題的JavaScript解決方案?

要解決與JavaScript數字相關的精度限制,您將需要使用BigInteger庫,例如此處提供的流行庫: http : //silentmatt.com/biginteger/

用法:

var a = BigInteger("1548764548675465486");
var b = BigInteger("4535154875433545787");
var c = a.add(b);

alert(a.toString() + ' + ' + b.toString() + ' = ' + c.toString());
// Alerts "1548764548675465486 + 4535154875433545787 = 6083919424109011273"

演示: http//jsfiddle.net/69AEg/1/

Javascript中沒有整數,所有數字都是雙精度浮點數。

這使您可以看到大約15-16位的精度。

根據這個問題和潛在的解決方案,即使用一個庫

就我個人而言,我不會使用javascript,從不擅長使用數字。 只需嘗試在任何瀏覽器控制台窗口中鍵入0.1 + 0.2。 結果是0.30000000000000004。

將計算結果發送到服務器端語言(作為字符串)並在那里進行工作,您應該會得到更好的結果。

在浮點數的細微差別技術文章在這里 ,如果你有興趣

好吧,這是我發現不使用任何外部庫的解決方案,我所要做的就是定義一個屬性值應為字符串的類,並定義函數plus

    function LongNumber()
    {
        // it takes the argument and remove first zeros
        this.value = arguments[0].toString();
        while(this.value[0]==="0")
            this.value = this.value.substr(1);

        // this function adds the numbers as string to another string and returns result as LongNumber
        this.plus = function (Num)
        {
            var num1 = pad(Num.value.length, this.value);
            var num2 = pad(this.value.length, Num.value);
            var numIndex = num1.length;
            var rest = 0;
            var resultString = "";
            while (numIndex)
            {
                var number1 = parseInt(num1[(numIndex)-1]);
                var number2 = parseInt(num2[(numIndex--)-1]);
                var addition = (number1+number2+rest)%10;
                rest = parseInt((number1+number2+rest)/10);
                resultString = addition.toString() + resultString;
            }
            return new LongNumber((rest?rest.toString():"") + resultString);
        }
        function pad(width, string) 
        { 
            return (width <= string.length) ? string : pad(width, '0' + string)
        }
    }

我現在要做的就是聲明2個LongNombers並使用函數plus

var Number1 = new LongNumber("1548764548675465486");
var Number2 = new LongNumber("4535154875433545787");
var Result = Number1.plus(Number2);

Result.value // returns "6083919424109011273"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM