我有一个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