/**
8 * double的計算不精確,會有類似0.0000000000000002的誤差,正確的方法是使用bigdecimal或者用整型
9 * 整型地方法適合於貨幣精度已知的情況,比如12.11+1.10轉成1211+110計算,最後再/100即可
10 * 以下是摘抄的bigdecimal方法:
11 */
public
class
doubleutils
implements
serializable
/*** 提供精確的減法運算。
**@param value1 被減數
*@param value2 減數
*@return 兩個引數的差
*/public
static
double
sub(double value1, double value2)
/*** 提供精確的乘法運算。
**@param value1 被乘數
*@param value2 乘數
*@return 兩個引數的積
*/public
static double mul(double value1, double value2)
/**57 * 提供(相對)精確的除法運算,當發生除不盡的情況時, 精確到小數點以後10位,以後的數字四捨五入。
58 *
59 *@param dividend 被除數
60 *@param divisor 除數
61 *@return 兩個引數的商
62 */
public
static double divide(double dividend, double divisor)
/**68 * 提供(相對)精確的除法運算。 當發生除不盡的情況時,由scale引數指定精度,以後的數字四捨五入。
69 *
70 *@param dividend 被除數
71 *@param divisor 除數
72 *@param scale 表示表示需要精確到小數點以後幾位。
73 *@return 兩個引數的商
74 */
public
static double divide(double dividend, double divisor, integer scale)
bigdecimal b1 = new bigdecimal(double.tostring(dividend));
bigdecimal b2 = new bigdecimal(double.tostring(divisor));
return b1.divide(b2, scale,roundingmode.half_up).doublevalue();
}/**
* 提供指定數值的(精確)小數字四捨五入處理。
86 *
87 *@param value 需要四捨五入的數字
88 *@param scale 小數點後保留幾位
89 *@return 四捨五入後的結果
90 */
public
static
double
round(double value,int scale)
bigdecimal b = new bigdecimal(double.tostring(value));
bigdecimal one = new bigdecimal("1");
return b.divide(one,scale, roundingmode.half_up).doublevalue();
}}
//加法
function
numadd
(num1, num2) catch (e)
try catch (e)
basenum = math.pow(10, math.max(basenum1, basenum2));
var precision = (basenum1 >= basenum2) ? basenum1 : basenum2;//精度
return ((num1 * basenum + num2 * basenum) / basenum).tofixed(precision);;
};
//減法運算
function
numsub
(num1, num2) catch (e)
try catch (e)
basenum = math.pow(10, math.max(basenum1, basenum2));
var precision = (basenum1 >= basenum2) ? basenum1 : basenum2;
return ((num1 * basenum - num2 * basenum) / basenum).tofixed(precision);
};
// 乘法運算
function
nummulti
(num1, num2) catch (e)
try catch (e)
return
number(num1.tostring().replace(".", "")) * number(num2.tostring().replace(".", "")) / math.pow(10, basenum);
};
// 除法運算,避免資料相除小數點後產生多位數和計算精度損失。
function
numdiv
(num1, num2) catch (e)
try catch (e)
with (math)
};
總結:
1.主要運用把double數轉為字串,再轉為bigdecimal
2.js中數字之前之後空格要去掉
python兩數相加取 兩數相加(Python3)
提出問題 給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出...
LeetCode 兩數相加
題目來自leetcode 注意幾點 鍊錶對應結點相加時增加前乙個結點的進製,並儲存下乙個結點的進製 兩個鍊錶長度不一致時,要處理較長鍊錶剩餘的高位和進製計算的值 如果最高位計算時還產生進製,則還需要新增乙個額外結點。definition for singly linked list.struct l...
兩數相加 II
給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 ...