BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 方法 BigDecimal b = new BigDecimal(“10.01”);b.divide(1,2,4);返回多少是10.00还是10.01请详细说一下这个方法,API文档没看懂 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 10.012 表示2位小数4 是ROUND_HALF_UP,也就是最常见的四舍五入,大于一般则向上舍入,否则向下舍入 BigDecimal b = new BigDecimal("10.016"); //LZ 用3位小数来测试看就知道了 10.013b = b.divide(BigDecimal.ONE, 2, 4);System.out.println(b); 我看api是RundingMode的下标所以我用RoundingMode rm =RoundingMode.valueOf(4); System.out.println(rm);打印出的结果是HALF_UP查apiHALF_UP 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。 貌似是四舍五入。 public static void main(String args[]){ RoundingMode rm =RoundingMode.valueOf(4); System.out.println(rm); BigDecimal b = new BigDecimal("10.015"); b=b.divide(new BigDecimal(1),2,4); System.out.print(b); }楼主自己测试,如果小数后面的位数等于你要求的精度,那么就也就不会进行四舍五入判断了。如果小于你的精度就后面补零。大于你的精度就四舍五入。API还说负数的情况不一样。请区别考虑。 谢了上面两位,我一直以为是divide方法原因,后来测试发现,如下 public static void main(String[] args) { BigDecimal v =new BigDecimal( "10.01"); System.out.println(v); BigDecimal b = new BigDecimal(v.floatValue()); System.out.println(b); b.divide(BigDecimal.ONE,2,4); System.out.println(b.divide(BigDecimal.ONE,2,4)); }这样输出 v是10.01,b是10.0100002288818359375,最后的是10.01。但是把10.01改成500000.01后v是500000.01,b是500000,最后是500000.01不知道这是什么原因。求指教 你要计算double的精度问题应该使用默认传入参数为String的构造函数。直接传入Double的构造函数是不行的 JAVA连接数据库MYSQL 如何实现从一加到100? 符号矩阵求逆的正则表达式问题 请大家帮我补充一下程序代码 请问为什么JPanel中drawImage()画不出图片 三个小问题,路过的来指点迷津。 有一个ResultSet,怎么把它传给一个需要RowSet参数的函数 那里有免费下载教JAVA的课堂录音 大哥你们是怎样编译,运行的 我用Oracle的Thin-Jdbc连Oracle数据库,为什么总出错? 新人,关于StringBuilder的equals方法,求大神指点一下 final的困惑
2 表示2位小数
4 是ROUND_HALF_UP,也就是最常见的四舍五入,大于一般则向上舍入,否则向下舍入
b = b.divide(BigDecimal.ONE, 2, 4);
System.out.println(b);
是RundingMode的下标
所以我用
RoundingMode rm =RoundingMode.valueOf(4);
System.out.println(rm);
打印出的结果是HALF_UP
查api
HALF_UP
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
貌似是四舍五入。
public static void main(String args[]){
RoundingMode rm =RoundingMode.valueOf(4);
System.out.println(rm);
BigDecimal b = new BigDecimal("10.015");
b=b.divide(new BigDecimal(1),2,4);
System.out.print(b);
}
楼主自己测试,如果小数后面的位数等于你要求的精度,那么就也就不会进行四舍五入判断了。如果小于你的精度就后面补零。大于你的精度就四舍五入。
API还说负数的情况不一样。请区别考虑。
BigDecimal v =new BigDecimal( "10.01");
System.out.println(v);
BigDecimal b = new BigDecimal(v.floatValue());
System.out.println(b);
b.divide(BigDecimal.ONE,2,4);
System.out.println(b.divide(BigDecimal.ONE,2,4));
}这样输出 v是10.01,b是10.0100002288818359375,最后的是10.01。
但是把10.01改成500000.01后
v是500000.01,b是500000,最后是500000.01不知道这是什么原因。求指教
应该使用默认传入参数为String的构造函数。直接传入Double的构造函数是不行的