iT邦幫忙

0

java bigdecmial問題

各位大大 朋友剛開始研究JAVA 想請問大家 這的SALARY中為何不能填寫數字呢? 一直跑出錯誤

timloo iT邦研究生 2 級 ‧ 2017-11-16 14:02:23 檢舉
把單引號'' 去掉,才是數字。而且java 單引號是字元,只能放一個字元。其他語言,單引號、雙引號是不分的。
fillano iT邦超人 1 級 ‧ 2017-11-16 14:30:42 檢舉
C#也一樣,單引號是字元...
![](https://i.imgur.com/KP8av4S.jpg)

2 個回答

0
石頭
iT邦研究生 3 級 ‧ 2017-11-16 14:02:49

你下面傳入參數是..字元
你因該要傳..數值

'100'改成100

石頭 iT邦研究生 3 級 ‧ 2017-11-16 14:53:38 檢舉

我剛剛google一下 發現bigdecimal是類別
你要產生一個物件
EX:BigDecimal b=new BigDecimal("100");
之後再將b變數傳入函數參數中
bigdecimal連結

感謝大大~~

1
bizpro
iT邦大師 1 級 ‧ 2017-11-18 13:54:45

如果您要使用BigDecimal, 請熟讀BigDecimal的文件, 您"看到"的數字和真實紀錄在軟體中的數字可能不同. 另外, BigDecimal是類別, 運算時效能遠低於原始(primitive)數值, 如double和float. 這是我寫的一個展示程式:

$ cat testbigdecimal.java 
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.math.MathContext;
class testbigdecimal{
  public static void main(String[] args){
    double dd = 0.35; 
    BigDecimal bd1 = new BigDecimal(dd);
    BigDecimal bd2 = new BigDecimal(dd, new MathContext(2, RoundingMode.HALF_UP));
    System.out.println("dd="+ dd+" vs bd1= " + bd1 + " vs bd2="+bd2);
  }
}

編譯:
$ javac testbigdecimal.java 
執行:
$ java testbigdecimal 
dd=0.35 vs bd1= 0.34999999999999997779553950749686919152736663818359375 vs bd2=0.35

一定要用MathContext, 而進位(RoundingMode)有七種:

  1. UP: 以絕對值無條件進位再還原正負值, 如: 1.6-->2; -1.6--> -2, 先不管正負號, 再正負號
  2. DOWN: 以絕對值無條件捨去再還原正負值; 都捨去! 5.5-->5; -5.5-->-5
  3. CEILING: 無條件進位(Round up), 無條件往較大的值進位, 如: 5.5-->6; -5.5-->-5
  4. FLOOR: 無條件捨去(Round down), 無條件往較小的值捨去, 如: 5.5-->5; -5.5-->-6, 比-5.5小的是-6, 捨到較小的一端
  5. HALF_UP: 常見的四捨五入(Round off), 五及五以上進位,其餘捨去 如5.5-->6, 等距, 進到6; 1.6-->2
  6. HALF_DOWN: 五及五以下捨去,其餘進位, 如5.5-->5, 等距, 捨為5, 1.6-->2
  7. HALF_EVEN: 四捨五入, 等距往最近的"偶數"進位或捨去, 如 5.5--> 6, 因為最近的偶數是6; 2.5-->2, 因為最近的偶數是2

因為複雜的需求產生這些複雜的操作,您也可以按需求繼承BigDecimal將MathContext和RoundingoMode封裝來簡化或延伸這些. 一般的公司行號primitive應該夠用了.

我要發表回答

立即登入回答