我確定這是一個非常簡單的問題,但我被卡住了。我是Groovy的新手。在Groovy部門顯示小數
比方說,我有:
Long percentageFee = 285
percentageFee = percentageFee/100 //Display as 2.85%
我已經試過這幾種方式,鑄造percentageFee
到double
,等等,但結果依然只是2
我一定是語法錯誤或者其他的東西。
我確定這是一個非常簡單的問題,但我被卡住了。我是Groovy的新手。在Groovy部門顯示小數
比方說,我有:
Long percentageFee = 285
percentageFee = percentageFee/100 //Display as 2.85%
我已經試過這幾種方式,鑄造percentageFee
到double
,等等,但結果依然只是2
我一定是語法錯誤或者其他的東西。
如果添加一個小數位兩個操作數之一,那麼它是不是整數除法了:
groovy:000> percentageFee = 285L
===> 285
groovy:000> percentageFee/100.0
===> 2.85
這裏100.0是一個BigDecimal。
如果這是Java,那麼將long與整數相乘會導致long。但在Groovy中,它並不像那樣工作。除法運算返回一個BigDecimal,結果賦給一個長截斷結果:(感謝blackdrag的澄清)
groovy:000> percentageFee = 285L
===> 285
groovy:000> f = percentageFee/100
===> 2.85
groovy:000> f.class
===> class java.math.BigDecimal
像這樣的東西應該這樣做:
def percentageFee = 285.0
percentageFee = percentageFee/100
println percentageFee
結果是2.85
您還可以通過更「Groovy」的方式來做到這一點,充分利用Groovy的優勢groovy - 動態類型變量。
def percentageFee = 285
percentageFee = percentageFee.div(100)
assert percentageFee == 2.85
這可能不適合您的具體情況,並不像添加小數和零那樣簡潔或簡單。
:-)
加法...的顯示代碼工作正常,但他沒有這樣做整數等分。他只得到2的原因是他將結果分配給了PercentFee,這是一個Long。這將導致由devision創建的BigDecimal被轉換爲Long,因此他會丟失點背後的所有部分。不使用類型可以解決問題。使用例如double(或Float或BigDecimal)for percentageFee也可以解決它 – blackdrag
@blackdrag:非常好的一點,編輯包含此,謝謝 –