java double數相加和相減的問題解決

2021-08-17 18:54:50 字數 3129 閱讀 1890

/**

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 ...