2016-06-09 48 views
-1

我想轉換一個double值,例如12.55BigDecimal與此代碼:如何正確地將BigDecimal轉換爲Decimal?

BigDecimal unitPrice = new BigDecimal(product.getUnitPrice()); 

其結果是,我得到了這樣的事情12.550000000000000710542735760100185871124267578125那我也與此代碼四捨五入它關閉:

unitPrice.setScale(2, RoundingMode.HALF_EVEN)

,得到了這樣的結果12.55這很好。然而,當我將它設置爲參數與此代碼插入到MySQL數據庫:

addProduct.setBigDecimal(4, unitPrice.setScale(2, RoundingMode.HALF_EVEN));

所以,當我運行它,我得到這個SQL錯誤:

Data truncation: Out of range value for column 'price_per_unit' at row 2

我知道這個問題是這樣的代碼:

addProduct.setBigDecimal(4, unitPrice.setScale(2, RoundingMode.HALF_EVEN));

正如我在這行代碼調試它,則該值是

12.550000000000000710542735760100185871124267578125

,我已設置在MySQL的列的數據類型爲DECIMAL(3,2)

即使當我把它變成圓形時,它怎麼不起作用?我試圖尋找解決方案,並找不到任何相關的東西。你如何正確設置小數?我假設你知道我想要做什麼。提前致謝。

+0

爲什麼'product.getUnitPrice()'返回一個浮點值?這是真正的問題。 – EJP

+0

@EJP它實際上返回了兩倍。 –

+1

['double * *是* floating-point](http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2.3)實際上,這是仍然是真正的問題。您不必四捨五入才能存儲到數據庫中。不要用浮點錢。 – EJP

回答

3

Decimal (3,2)表示該號碼總共有三位數字,一位在左邊,兩位在右邊。 12.55不適合這個。 你打算存儲三個左邊?這將是decimal(5,2)

+0

噢....你是對的......我怎麼沒有意識到這一點?謝謝你,托馬斯。這只是一個簡單的解決方案。大聲笑 :) –

0
如果你想保持DECIMAL(3,2)的

的代碼將

new BigDecimal(12.55f, new MathContext(3, RoundingMode.HALF_EVEN)).setScale(2); 
相關問題