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。