一.前言
Double只能處理16位有效數(shù)精度,在某些情況下精度對其需求是不夠的,所以就有了BigDecimal。因為BigDecimal的精度范圍的范圍大,所以在問我們的開發(fā)業(yè)務(wù)中對精度要求高的屬性,就需要BigDecimal來進行存儲計算,防止精度丟失。這里我主要介紹一下BigDecimal的加,減,乘,除。四種基礎(chǔ)計算。
二.內(nèi)容
首先準備兩個BigDecimal類型的數(shù)
// new第一個參數(shù)
BigDecimal num1 = new BigDecimal(20.5555555555);
// new第二個參數(shù)
BigDecimal num2 = new BigDecimal(10.5555555554);
精度類 MathContext:
MathContext可以自己定義保留的有效數(shù)字位數(shù):
MathContext mathContext = new MathContext(2);
其中2是指有效數(shù)字位數(shù)。MathContext類還有幾個默認參數(shù)分別是:
MathContext.UNLIMITED = 不限制精度 采用四舍五入
MathContext.DECIMAL32 = 7位有效數(shù)字 采用“最接近的”數(shù)字舍入
MathContext.DECIMAL64 = 16位有效數(shù)字 采用“最接近的”數(shù)字舍入
MathContext.DECIMAL128 = 34位有效數(shù)字 采用“最接近的”數(shù)字舍入
1.加法
加法可以使用MathContext來確定有效數(shù)字位數(shù):
// BigDecimal的加法 有兩種 一種無精度入?yún)?一種有精度入?yún)?/p>
// 無精度入?yún)?num1減去num2
BigDecimal addNum1 = num1.add(num2);
// 有精度入?yún)?/p>
// MathContext.UNLIMITED = 不限制精度
// MathContext.DECIMAL32 = 7位有效數(shù)字
// MathContext.DECIMAL64 = 16位有效數(shù)字
// MathContext.DECIMAL128 = 34位有效數(shù)字
MathContext mathContext = new MathContext(2);
BigDecimal addNum2 = num1.add(num2, MathContext.DECIMAL32);
2.減法
減法可以使用MathContext來確定有效數(shù)字位數(shù):
// BigDecimal的減法 有兩種 一種無精度入?yún)?一種有精度入?yún)?/p>
// 無精度入?yún)?/p>
BigDecimal subNum1 = num1.subtract(num2);
// 有精度入?yún)?/p>
BigDecimal subNum2 = num1.subtract(num2,MathContext.DECIMAL32);
3.乘法
乘法可以使用MathContext來確定有效數(shù)字位數(shù)
// BigDecimal的乘法 有兩種 一種無精度入?yún)?一種有精度入?yún)?/p>
// 無精度入?yún)?/p>
BigDecimal mulNum1 = num1.multiply(num2);
// 有精度入?yún)?/p>
BigDecimal mulNum2 = num1.multiply(num2,MathContext.DECIMAL32);
4.除法
其中除法有很多不同入?yún)⒌姆椒?,以下舉例4種:
// BigDecimal的除法
// 無精度入?yún)?/p>
BigDecimal divNum1 = num1.divide(num2);
// 有精度入?yún)?MathContext
BigDecimal divNum2 = num1.divide(num2,MathContext.DECIMAL32);
// 有精度入?yún)?RoundingMode RoundingMode.HALF_UP -> 四舍五入精度
BigDecimal divNum3 = num1.divide(num2, RoundingMode.HALF_UP);
// 有精度入?yún)?RoundingMode RoundingMode.HALF_UP -> 四舍五入精度 scale 表示四舍五入到幾位小數(shù)
BigDecimal divNum4 = num1.divide(num2,2, RoundingMode.HALF_UP)
具體代碼如下:
package useful;
import java.math.BigDecimal;
public class StudyBigDecimal {
public static void main(String[] args) {
String s1 = "1.30";
String s2 = "-0.40";
StudyBigDecimal studyBigDecimal = new StudyBigDecimal();
String r = studyBigDecimal.add(s1, s2);
System.out.println(r);
}
public String add(String s1,String s2) {
BigDecimal b1 = new BigDecimal(String.valueOf(s1));
BigDecimal b2 = new BigDecimal(String.valueOf(s2));
BigDecimal b3 = b1.add(b2);
return b3.toString();
}
public void other(String s1,String s2) {
BigDecimal b1 = new BigDecimal(String.valueOf(s1));
BigDecimal b2 = new BigDecimal(String.valueOf(s2));
BigDecimal b3 = b1.subtract(b2); //減法運算
BigDecimal b4 = b1.multiply(b2); //乘法運算
BigDecimal b5 = b1.divide(b2); //除法運算
}
}
Java BigDecimal轉(zhuǎn)化為字符串(科學(xué)計數(shù)法)的三種方法
介紹BigDecimal的3個toString方法的區(qū)別。
toEngineeringString:有必要時使用工程計數(shù)法。工程記數(shù)法是一種工程計算中經(jīng)常使用的記錄數(shù)字的方法,與科學(xué)計數(shù)法類似,但要求10的冪必須是3的倍數(shù)
toPlainString:不使用任何指數(shù)(永不使用科學(xué)計數(shù)法)
toString:有必要時使用科學(xué)計數(shù)法
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
BigDecimal number = new BigDecimal("1E11");
System.out.println(number.toEngineeringString());
System.out.println(number.toPlainString());
System.out.println(number.toString());
}
}
輸出:
100E+9
100000000000文章來源:http://www.zghlxwxcb.cn/news/detail-402090.html
1E+11文章來源地址http://www.zghlxwxcb.cn/news/detail-402090.html
到了這里,關(guān)于Java進行數(shù)字計算 BigDecimal計算(加減乘除)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!