[英]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/
好吧,這是我發現不使用任何外部庫的解決方案,我所要做的就是定義一個屬性值應為字符串的類,並定義函數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.