楼主真的是有够懒,连api都不肯查。 算了,给你个示例吧: BigDecimal x = new BigDecimal(27.475); BigDecimal y = new BigDecimal(7.22); BigDecimal result = x.subtract(y); System.out.println(result);
http://www.csdn.net/develop/article/17/17400.shtm
To: darksmile(darksmile) 结果不正确:是20.255000591278076171875
那这样呢? x = new BigDecimal(new Integer(27475), 3); y = new BigDecimal(new Integer(722), 2);
更正: x = new BigDecimal(BigInteger.valueof(27475), 3); y = new BigDecimal(BigInteger.valueof(722), 2);
最后放出完整版 BigDecimal x = new BigDecimal(BigInteger.valueOf(27475l), 3); BigDecimal y = new BigDecimal(BigInteger.valueOf(722l), 2); System.out.println(x); System.out.println(y); System.out.println(x.subtract(y));
BigDecimal x = new BigDecimal(27.475); BigDecimal y = new BigDecimal(7.22); BigDecimal result = x.subtract(y).setScale(3,BigDecimal.ROUND_HALF_DOWN); System.out.println(result);
To jiyunang(DANNY_JI): 其实你犯了和我一样的错误,虽然最后的结果是对的 BigDecimal x = new BigDecimal(27.475); BigDecimal y = new BigDecimal(7.22); 问题出在这2句上。27.475是double常数,在内部存储的时候已经丧失精度了。所以x和y都是不准确的数。 不信你可以用System.out.println(x);试试看。 setScale(3,BigDecimal.ROUND_HALF_DOWN);对最后的结果进行了舍入操作,所以打印出来是对的。给BigDecimal赋精确值的办法只有2个: 要么从字符串解析。 要么采用底数,幂的形式来定义。底数一定要是大整数。
还有一种 BigDecimal x = new BigDecimal(String.valueOf(27.475)); BigDecimal y = new BigDecimal(String.valueOf(7.22)); System.out.println(x); System.out.println(y); System.out.println(x.subtract(y));
算了,给你个示例吧:
BigDecimal x = new BigDecimal(27.475);
BigDecimal y = new BigDecimal(7.22);
BigDecimal result = x.subtract(y);
System.out.println(result);
结果不正确:是20.255000591278076171875
x = new BigDecimal(new Integer(27475), 3);
y = new BigDecimal(new Integer(722), 2);
x = new BigDecimal(BigInteger.valueof(27475), 3);
y = new BigDecimal(BigInteger.valueof(722), 2);
BigDecimal x = new BigDecimal(BigInteger.valueOf(27475l), 3);
BigDecimal y = new BigDecimal(BigInteger.valueOf(722l), 2);
System.out.println(x);
System.out.println(y);
System.out.println(x.subtract(y));
BigDecimal y = new BigDecimal(7.22);
BigDecimal result = x.subtract(y).setScale(3,BigDecimal.ROUND_HALF_DOWN);
System.out.println(result);
其实你犯了和我一样的错误,虽然最后的结果是对的
BigDecimal x = new BigDecimal(27.475);
BigDecimal y = new BigDecimal(7.22);
问题出在这2句上。27.475是double常数,在内部存储的时候已经丧失精度了。所以x和y都是不准确的数。
不信你可以用System.out.println(x);试试看。
setScale(3,BigDecimal.ROUND_HALF_DOWN);对最后的结果进行了舍入操作,所以打印出来是对的。给BigDecimal赋精确值的办法只有2个:
要么从字符串解析。
要么采用底数,幂的形式来定义。底数一定要是大整数。
BigDecimal x = new BigDecimal(String.valueOf(27.475));
BigDecimal y = new BigDecimal(String.valueOf(7.22));
System.out.println(x);
System.out.println(y);
System.out.println(x.subtract(y));
我觉得用字符串解析比较好,
因为采用底数,幂的形式来定义,
必须精确知道小数点位置。
{
BigDecimal x = new BigDecimal(String.valueOf(m));
BigDecimal y = new BigDecimal(String.valueOf(s));
System.out.println(x);
System.out.println(y);
BigDecimal result = x.subtract(y);
System.out.println(x.subtract(y));
System.out.println(result);
return result.doubleValue();
}
采用底数,幂的形式能这样用吗?
实际上这样是用BigDecimal做桥梁。不过这样数据范围就被限定在double型之内了。
private ??? substract(object m,object s)
会更好也不一定
所有的Wrapper类和BigDecimal,BigInteger都是Number的子类。
结果会不一样
计算机就这样有时会出问题float a;
float x = 27.475f;
float y = 7.22f;
a=x-y;
System.out.println(a);