程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Groovy >> Groovy Tip 30 BigDecimal數據類型

Groovy Tip 30 BigDecimal數據類型

編輯:Groovy

Groovy語言比Java語言使用起來更為方便的一個地方就是Groovy語言引入了對大小數的運算。當然,我們這裡所說的大小數,是指精度超過float類型和double類型的小數。我們可能在某些場合會涉及到對大小數的處理,如果是使用Java語言,我們只能是或者使用java.math.BigDecimal來處理,當然,它的使用是很不方便的;或者干脆自己設計數據類型來解決大小數的問題。但是,在Groovy語言中,我們卻能夠直接使用BigDecimal數據類型來解決這個問題。

在Groovy語言中,小數的默認類型就是BigDecimal類型。

println 1.2.class.name

運行結果為:

java.math.BigDecimal

說到這裡,在做int類型除法運算時,有一個Groovy語言和Java語言的區別需要提出來。

在Java語言中,下面的運算:

System.out.println(1/2);

的結果是0。

如果您想獲得小數,必須做如下的運算:

System.out.println((float)1/2);

而在Groovy語言中,下面的運算:

println (1/2)

的結果卻是0.5。

如果您想取整,必須做如下的運算:

println ((1/2) as int)

在Groovy語言中,我們也可以使用負指數來表示大小數類型。如:

println 1.2e-39

所以,我們初始化一個大小數可以使用小數的方式和負指數的方式。如:

def bd1 = 1.23044953333333333

def bd2 = 1.3e-45

println bd1.class.name

println bd2.class.name

運行結果為:

java.math.BigDecimal

java.math.BigDecimal

當然,我們還可以通過數值型字符串來初始化一個大小數。如:

def bd3 = '1.3e-40' as BigDecimal

def bd4 = new BigDecimal('1.3e-40')

println bd3.class.name

println bd4.class.name

運行結果為:

java.math.BigDecimal

java.math.BigDecimal

說了這麼多,當然是時候該說說在Groovy語言中使用BigDecimal類型比在Java語言中使用BigDecimal類型更為方便的地方。當然了,我們所說的方便,首先體現在對BigDecimal類型數據的各種運算上,如加減乘除成方等等。如:

println (1.2e-9+1.5e-9)

println (1+1.2e-20)

運行結果為:

2.7E-9

1.000000000000000000012

println 1e-4**3

運行結果為:

1.0000000000000002E-12

其次,在Groovy語言中有方便的負指數小數到小數型小數之間的轉化。如:

println (1.2e-20.toPlainString())

運行結果為:

0.000000000000000000012

值得注意的是,如果想計算1和2之間的整除,上面的"(1/2) as int"方法固然是可取的。但實際上,這種計算有性能上的問題,它先是使用了BigDecimal類型之間的除法,然後又進行了一個類型轉換,這樣使得它在性能上很慢。

當然,Groovy語言為我們提供了直接的整除方法,如下面的代碼:

def result = 1.intdiv(2)

println result

上面的結果為0。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved