我有一個csv文件,其中的金額和數量字段存在於除首部和尾部的每個記錄明細記錄。預告片記錄具有總計費用值,這是總額詳細記錄中乘以數量字段的總和。我需要檢查拖車總費用值是否等於我的數量和數量字段的計算值。我在所有這些計算中使用雙數據類型關於大十進制
在csv文件中,數量字段顯示爲「10.12」或「10」或「10.0」或「10.456」或「10.4555」或「-10.12」。金額也可以有正值或負值。
在csv文件
H,ABC .....
「d」,..., 「1」, 「12.23」
「d」,... .., 「3」, 「 - 13.334」
「d」,......, 「2」, 「12」
T,CSD,123,12.345
- -------------當Vali我有以下代碼--------------------
double detChargeCount =0;
//From csv file i am reading trailer records charge value
String totChargeValue = items[3].replaceAll("\"","").trim();
if (null != totChargeValue && !totChargeValue.equals("")) {
detChargeCount = new Double(totChargeValue).doubleValue();
if(detChargeCount==calChargeCount)
validflag=true;
---------------- -------在閱讀CSV文件我有下面的代碼
if (null != chargeQuan && !chargeQuan.equals("")) {
tmpChargeQuan=Long(chargeQuan).longValue();
}
if (null != chargeAmount && !chargeAmount.equals("")) {
tmpChargeAmt=new Double(chargeAmount).doubleValue();
calChargeCount=calChargeCount+(tmpChargeQuan*tmpChargeAmt);
}
我已經聲明的變量tmpChargeQuan,tmpChargeAmt,calChargeCount爲雙
當我搜索網頁我才知道,雙可能會出現財務計算問題,因此需要使用BIGDECIMAL。但我想知道這種情況適用於我的計算。在我的情況下,小數點後的金額值可以達到5或6位數字「我可以使用雙數據類型進行這種計算嗎?我正在使用它進行驗證。如果我使用上面的代碼使用雙數乘法,會產生問題嗎?
非常感謝 所以你的言論,即使我小數點後有4位數(低精度)。乘法時我可能會遇到錯誤。另外我注意到bigdecimal有一個setscale方法來設置小數點和舍入方法後的數字位數。在我的情況下,我不需要做任何舍入,因爲我只對數值進行驗證。此外,我的輸入可能有時在小數點後有2或3或0個數字。 BigDecimal是否有默認舍入?我將按以下方式分配 BigDecimal aa = new BigDecimal(「11.2359」); – Arav 2010-03-01 04:37:37
除非您已將該數字指定爲double,否則沒有對BigDecimal的默認舍入。你作爲一個字符串輸入的是你得到的。如果您的比例小於當前結果,setScale上的舍入模式肯定是必需的 - 假設您有6.35,並且您說setScale(1) - 根據您選擇的舍入模式,它將使其達到6.3或6.4。 – MetroidFan2002 2010-03-01 14:17:10
非常感謝。所以你說如果我把它放在字符串BigDecimal(「11.2359」)中,並用另一個BigDecimal(「12」)類型進行乘法運算,它將不會結果?如果我把它作爲double BigDecimal(11.2359)給出它,當我進行乘法運算或其他操作時,它會執行什麼樣的默認舍入操作。 如果我想比較兩個大數小數的值來查看它們是否相等,那麼我需要獲得doublevalue,然後檢查它們嗎? – Arav 2010-03-02 01:05:48