我想轉換一個double值,例如12.55
到BigDecimal
與此代碼:如何正確地將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)
。
即使當我把它變成圓形時,它怎麼不起作用?我試圖尋找解決方案,並找不到任何相關的東西。你如何正確設置小數?我假設你知道我想要做什麼。提前致謝。
爲什麼'product.getUnitPrice()'返回一個浮點值?這是真正的問題。 – EJP
@EJP它實際上返回了兩倍。 –
['double * *是* floating-point](http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2.3)實際上,這是仍然是真正的問題。您不必四捨五入才能存儲到數據庫中。不要用浮點錢。 – EJP