BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 方法

松间沙路净无泥 2012-04-13 12:01:30
BigDecimal b = new BigDecimal(“10.01”);
b.divide(1,2,4);返回多少是10.00还是10.01


请详细说一下这个方法,API文档没看懂
...全文
2786 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdojqy1122 2012-04-13
  • 打赏
  • 举报
回复
我看api
是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还说负数的情况不一样。请区别考虑。

qybao 2012-04-13
  • 打赏
  • 举报
回复
BigDecimal b = new BigDecimal("10.016"); //LZ 用3位小数来测试看就知道了 10.013
b = b.divide(BigDecimal.ONE, 2, 4);
System.out.println(b);
qybao 2012-04-13
  • 打赏
  • 举报
回复
10.01
2 表示2位小数
4 是ROUND_HALF_UP,也就是最常见的四舍五入,大于一般则向上舍入,否则向下舍入
  • 打赏
  • 举报
回复
恩,知道了,主要是数据类型精度问题。基础还是不行啊。
inCoding 2012-04-13
  • 打赏
  • 举报
回复
你要计算double的精度问题
应该使用默认传入参数为String的构造函数。直接传入Double的构造函数是不行的
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

谢了上面两位,我一直以为是divide方法原因,后来测试发现,如下
Java code

public static void main(String[] args) {
BigDecimal v =new BigDecimal( "10.01");
System.out.println(v);
BigDecimal b = new Big……
[/Quote]
更正一下
10.01改成500000.01后
v是500000.01,b是500000,最后是500000.00
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

谢了上面两位,我一直以为是divide方法原因,后来测试发现,如下
Java code

public static void main(String[] args) {
BigDecimal v =new BigDecimal( "10.01");
System.out.println(v);
BigDecimal b = new Big……
[/Quote]

更正一下
10.01改成500000.01后
v是500000.01,b是500000,最后是500000.00
  • 打赏
  • 举报
回复
谢了上面两位,我一直以为是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


不知道这是什么原因。求指教

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧