qq_五角心_0
2017-02-22 20:35
请问为什么p用3.14的时候,周长不是31.4??(用3.13等的时候也一样)
精度问题,可以用BigDecimal计算,就不会有这种情况了
保留小数:java DecimalFormat format 方法的使用
1:new DecimalFormat("00.000").format(pi) //结果:03.142
比实际数字的位数多,不足的地方用0补上。
new DecimalFormat("00.00").format(3.14) //结果:03.14
new DecimalFormat("0.000").format(3.14) //结果: 3.140
比实际数字的位数少:整数部分不改动,小数部分,四舍五入
new DecimalFormat("0.000").format(13.146) //结果:13.146
new DecimalFormat("00.00").format(13.146) //结果:13.15
2:new DecimalFormat("##.###").format(pi) //结果:3.142
比实际数字的位数多,不变。
new DecimalFormat("##.###").format(3.14) //结果:3.14
比实际数字的位数少:整数部分不改动,小数部分,四舍五入
new DecimalFormat("#.##").format(13.146) //结果:13.15
采用java.math.BigDecimal类来进行精确计算。
在使用BigDecimal类来进行计算的时候,主要分为以下步骤:
1、用float或者double变量构建BigDecimal对象。
2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。
3、把BigDecimal对象转换成float,double,int等类型。
一般来说,可以使用BigDecimal的构造方法或者静态方法的 valueOf()方法把基本类型的变量构建成BigDecimal对象。
1 BigDecimal b1 = new BigDecimal(Double.toString(0.48));
2 BigDecimal b2 = BigDecimal.valueOf(0.48); 对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。
1 public BigDecimal add(BigDecimal value);
public static double add(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.add(b2).doubleValue();}
//加法
2 public BigDecimal subtract(BigDecimal value); //减法
3 public BigDecimal multiply(BigDecimal value); //乘法
4 public BigDecimal divide(BigDecimal value); //除法
测试参数类型为double和String的两个常用构造函数
BigDecimal aDouble =new BigDecimal(1.22);
System.out.println("construct with a double value: " + aDouble);
BigDecimal aString = new BigDecimal("1.22");
System.out.println("construct with a String value: " + aString);
输出结果如下:
construct with a double value: 1.219999
construct with a String value: 1.22
String 构造方法是完全可预知的,通常建议优先使用String构造方法
BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。
java BigDecimal比较大小
比较大小可以用 a.compareTo(b)
返回值 -1 小于 0 等于 1 大于
BigDecimal取其中最大、最小值、绝对值、相反数:
a.max (b) //比较取最大值
a.min(b) //比较取最小值
a.abs()//取最绝对值
a.negate()//取相反数
精度问题吧,我记得可以有个叫PI的方法
是精度问题,有点记不清了,希望有帮助
Java入门第二季 升级版
530559 学习 · 6091 问题
相似问题