一、MySql數據庫中如何定義關於金額字段:
建議定義成【DECIMAL】類型,而不是float或者是double,因為這個兩者是以二進制儲存的,存在一定的誤差。具體事例可參考https://blog.csdn.net/xzp_12345/article/details/79460410。
此外還要注意的就是默認值, 一定寫成0.00, 不要用默認的NULL, 否則在進行加減排序等操作時, 會帶來轉換的麻煩
二、Java實體類中定義成【BigDecimal】類型,涉及到金額的加減乘除及值大小比較,使用其提供的相應方法處理。具體可參考https://blog.csdn.net/u011277123/article/details/70214630
三、在使用JSONArray.fromObject方法時,如果其中有float類型的值,有時候轉化的時候又會出現誤差問題,建議將需要傳入的數值改成字符串類型,接收到之后在進行轉值處理。具體可參考:http://www.iteye.com/problems/75223
四、在ireport打印有金額時,有時候又會出現誤差問題,試過將對於的值再ireport中Expression屬性設置成java.math.BigDecimal,Pattern屬性設置成#,##.00,仍是沒有作用,處理方法是從查詢的sql語句源頭出發,將涉及到的金額數值,轉化成char類型,如下
1
|
select
cast
(totalMoney
as
char
)
as
totalMoneyStr
from
demo
|