如果對數值結果精度要求很高,那么就可以使用BigDecimal,BigDecimal可以精準的控制小數點后面的數字
Java培訓
- 實體 BigDecimal 物件
通常會使用 String 和 int 構造方法實體出 BigDecimal 物件,即
new BigDecimal(String val);
new BigDecimal(int val);
如引數為 double 型別,得先轉換成 String 型別再入參
new BigDecimal(Double.toString(123.123));
- BigDecimal 加減乘除
加減乘除都是用 BigDecimal 物件點(.)加減乘除方法入參 BigDecimal 物件,回傳的也是 BigDecimal 物件
加:BigDecimal add = new BigDecimal(“123.123”).add(new BigDecimal(“123.123”)); —> 246.246
減:BigDecimal subtract = new BigDecimal(“123.123”).subtract(new BigDecimal(“123.123”)); —> 0.000
乘:BigDecimal multiply = new BigDecimal(“123.123”).multiply(new BigDecimal(“123.123”)); —> 15159.273129
除:BigDecimal divide = new BigDecimal(“123.123”).divide(new BigDecimal(“123.123”)); —> 1
注:其中除法一般不會這樣直接除,在不能整除的情況下,這樣運行程式是會報錯的,所以一般除法會使用下面這個多載方法
new BigDecimalhttps://jingyan.baidu.com/article/17bd8e521d0df1c4ab2bb8c9.html(“10”).divide(“40”,1,ROUND_HALF_UP); —> 0.3
正常計算 10/40 結果為 0.25, 在這里是計算 十除以四十,保留一位小數,四舍五入模式,所以得到的結果為 0.3
最常用的模式:
① ROUND_HALF_UP:四舍五入
② ROUND_HALF_DOWN:向下取舍(去掉保留小數位后面的小數)
- Scale 屬性操作
① 獲取小數的位數:new BigDecimal(“123.123”).scale() —> 3
② setScale() 方法保留幾位小數
- setScale(int NewScale):(注:入參的數字只能大于等于小數的位數,括號中只能入參大于等于 3 的數)
例: new BigDecimal(“123.123”).http://www.xingkongmj.com/news/id/78.htmlsetScale(3) —> 123.123
new BigDecimal(“123.123”).setScale(5) —> 123.12300
- setScale(int newScale, RoundingMode roundingMode):
例:new BigDecimal(“123.123”).setScale(2,RoundingMode.HALF_UP) —> 123.12
new BigDecimal(“123.125”).setScale(2,RoundingMode.HALF_UP) —> 123.13
new BigDecimal(“123.123”).setScale(2,RoundingMode.HALF_DOWN) —> 123.12
new BigDecimal(“123.125”).setScale(2,RoundingMode.HALF_DOWN) —> 123.12
- compareTo 比較大小
等于:new BigDecimal(“123.123”).compareTo(new BigDecimal(“123.123”))==0 —> true
new BigDecimal(“123.123”).compareTo(new BigDecimal(“123.123”)) —> 0
如果 compareTo 的結果為 0 的話,就證明兩個物件相等(當左邊不等于右邊時,第一個運算式則為 false)
小于:new BigDecimal(“123.122”).compareTo(new BigDecimal(“123.123”)) < 0 —> true
new BigDecimal(“123.122”).compareTo(new BigDecimal(“123.123”)) —> -1
如果 compareTo 的結果為 -1 的話,就證明左邊小于右邊(當左邊大于等于右邊時,第一個運算式則為 false)
大于:new BigDecimal(“123.124”).compareTo(new BigDecimal(“123.123”)) > 0 —> true
new BigDecimal(“123.124”).http://www.xingkongmj.com/news/id/77.htmlcompareTo(new BigDecimal(“123.123”)) —> 1
如果 compareTo 的結果為 1 的話,就證明左邊大于右邊(當左邊小于等于右邊時,第一個運算式則為 false)
(1)算術運算子:+ – * /(除也可以寫成div) %(取模可以寫成mod)
(2)比較運算子:= > >= < <= !=(不等于還可以寫成<>) <=>(安全等于)
(3)邏輯運算子:&&(邏輯與也可以寫成and) ||(邏輯或也可以寫成or) not(邏輯非)
(4)范圍:運算式 between … and … (也可以寫成 運算式>=… and 運算式 <=…)
運算式 not between … and …(也可以寫成 運算式<… || 運算式 >…)
(5)集合:in (值,值,值…) not in(值,值,值…)
(6)模糊查詢:LIKE NOT LIKE,通配符:%表示0-n個字符,_下劃線代表一個字符
(7)位運算子:&(按位與) |(按位或)^(按位異或)~(按位取反)>>(右移)<<(左移)
(8)NULL值判斷,is null 或http://www.xingkongmj.com/news/id/76.html is not ull,如果使用null=null,null<>null,null=0,null<>0,null=false等都不對
不過xxx is null 可以使用xxx <=> null ,xxx is not null 可以寫成 not xxx <=> null
結論:所有的運算子遇到NULL結果都是NULL,除了<=>
1、算術運算子
#一、算術運算子
#+,-,*,/(div),%(mod)
#篩選出eid是偶數的員工
SELECT * http://www.xingkongmj.com/news/id/75.htmlFROM t_employee WHERE eid % 2 = 0;
SELECT * FROM t_employee WHERE eid MOD 2 = 0;
#查看每天的基本工資值,每個月按22天算
SELECT eid,basic_salary/12 AS “日薪”
FROM t_salary;
#div也表示除,但是只保留整數部分
SELECT eid,basic_salary DIV 12 AShttp://www.xingkongmj.com/news/id/74.html “日薪”
FROM t_salary;
#關于+,在Java中,+的左右兩邊如果有字串,那么表示字串的拼接,但是在MySQL中+只表示數值相加,
#如果遇到非數值型別,先嘗試轉成數值,如果轉失敗,就按0計算
SELECT eid+ename FROM t_employee;
SELECT eid+birthday FROM t_employee;
#MySQLhttp://www.xingkongmj.com/news/id/73.html中字串拼接要使用字串函式實作
SELECT CONCAT(eid,”:”,ename) AS result FROM t_employee;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/228107.html
標籤:其他
下一篇:2020-11-10
