看了下API
也翻了下前面的帖子,还是不明白啊
看过一个精确的4舍5入的方法: public static double round(double v,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,10).doubleValue();
}
这里面可以把scale 当参数传进去!!而当我对一个BigDecimal对象使用setScale(int)时候出异常呢??我们到底该什么时候用Scale??
难道只能在divide的时候用???求解啊
也翻了下前面的帖子,还是不明白啊
看过一个精确的4舍5入的方法: public static double round(double v,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,10).doubleValue();
}
这里面可以把scale 当参数传进去!!而当我对一个BigDecimal对象使用setScale(int)时候出异常呢??我们到底该什么时候用Scale??
难道只能在divide的时候用???求解啊
解决方案 »
- 有什么办法纠正直线端点的偏移
- 纠结了3,4天的一个问题,尝试过很多方法都没解决。求助!急急急!!!
- enum 这样遍历为什么不行?
- JCreator中为什么点不出J2EE的包?比如:servlet。
- 在哪下载JAVA类库电子版说明
- 怎么做这样一个窗口
- 小弟刚学java写了个Helloworld,编译出来.class文件有191K,网上的APP程序只有几K,怎么回事?
- 请教一个问题,在jform里面,如果我想给jmenu加入事件关联,给怎么办?
- 关于package的打包问题?
- 我是非计算机的专业的,没学过算法,数据结构,编译原理等等,那么这些有关的书我要不要看呢?
- 编译后,出现14个错误,我修改了7个,还有7个不明白是什么原因,想高手给分析一下。
- 只有上下级关系,请教一个机构树的算法/
Scale指的是小数点后面的位数。
BigDecimal可以通过setScale来提高精度,只要新设的值比原来的大!
BigDecimal也可以通过setScale来降低精度。因为新设的值比原来的小,所以必须保证原来数值的该位小数点后面都是0,只有这样才可以设比原来小的精度。
如果原来的值是:4.1235648,你想把scale设为小于7为都会出错的,如果原来的值是:4.1235000,你把scale设为小于4位会出错,而设为4、5、6、7都没有问题,当然设得更大,肯定不会出错
public static void main(String[] args){
BigDecimal bd = new BigDecimal("4.1235000");
bd.setScale(6);
System.out.println(bd.doubleValue());
}
如果BigDecimal构照函数是字符串的话 你在bd.setScale(6);//设4 5 6 7 都是显示4.1235 , 小于4的话异常如果是:
public static void main(String[] args){
BigDecimal bd = new BigDecimal(4.1235000);
bd.setScale(6);
System.out.println(bd.doubleValue());
}
BigDecimal构照函数是字符串的话 你在bd.setScale(6);//这里不管设成几都有异常, 这是怎么会事?
而当构造函数用double型做参数的话,由于计算机使用2进制表示,那么4.1235在计算机中的表示并不是4.1235,而是4.12349999999999994315658113919198513031005859375 ,那它的精度(scale)的精度就是47位,所以你把它设为6肯定会出错
BigDecimal bd = new BigDecimal("4.1235000");
bd.setScale(6);
System.out.println(bd.doubleValue());
}
那为什么 在bd.setScale(6);//这里设4 5 6 7的话为什么都是显示4.1235 ,而不是我要的精度4.12350 4.123500 4.1235000 呢??
是不是因为上面那 4.12350 4.123500 4.1235000 都是大小一样,所以在doubleValue()都只显示4.1235啊?
你打印System.out.println(bd);或者System.out.println(bd.toString());就可以看到,BigDecimal的精度是准确的!