java 中 Integer 跟 double类型相乘还有比较的有关问题
java 中 Integer 跟 double类型相乘还有比较的问题
今早遇到了一个问题 Integer 跟 double类型相乘的问题
eg1:
Integer packSize = 2; Integer qty = 7; Double nw = 20.4; int result = qty - qty % packSize; System.out.println(qty % packSize); System.out.println(qty - qty % packSize); System.out.println(nw * result);
输出结果:
6 122.39999999999999
eg2:
Integer packSize = 2;
Integer qty = 7;
Double nw = <font class="Apple-style-span" color="#FF0000">20.5</font>;
int result = qty - qty % packSize;
System.out.println(qty % packSize);
System.out.println(qty - qty % packSize);
System.out.println((float
)nw * result);
输出结果:
6 122.4
然后我选者了BigDecimal
eg:
public static void main(String arg[]){ BigDecimal bd = new BigDecimal("0"); bd = bd.add(new BigDecimal("99.99")); bd = bd.add(new BigDecimal("1.99")); System.out.println("BigDecimal result " + bd); double d = 99.99; d = d + 1.99; System.out.println("Double result " + d); }
输出结果为:
BigDecimal result 101.98 Double result 101.97999999999999
然后我这样做的:
Double grossWeight; //..... @Transient public Integer getRemainder() { return qty % packSize; } @Transient public Double getGrossWeights() { return grossWeight * getRemainder(); }
因为我上一级要做加法运算
@Transient public Double getTotalGrossWeightAmount() { class EntrySubTotalVisitor implements Visitor<ShipmentRecordEntry> { Double totalGrossWeightAmount = 0.0; public void visit(final ShipmentRecordEntry entry) { totalGrossWeightAmount += entry.getGrossWeights(); } } EntrySubTotalVisitor visitor = new EntrySubTotalVisitor(); Algorithms.traverse(shipmentRecordEntries, visitor); return visitor.totalGrossWeightAmount; }
so:
我的测试是这样写的
import org.testng.annotations.Test; import java.math.BigDecimal; @Test public void testGetGrossWeights() { ShipmentRecordEntry entry = new ShipmentRecordEntry(); entry.setQty(7); entry.setPackSize(2); entry.setGrossWeight(20.4); BigDecimal bd = new BigDecimal(entry.getGrossWeights()); assert String.valueOf(bd.floatValue()).equals("122.4") : String .valueOf(bd.floatValue()); }
测试pass。