BigDecimal 小问题

gaojava 2010-04-01 11:26:21

double pr =0.056;
BigDecimal bd=new BigDecimal(Double.toString(pr));
bd.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(bd.doubleValue()); //0.056


double pr =0.056;
BigDecimal bd=new BigDecimal(Double.toString(pr)).setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(bd.doubleValue());//0.06



这两个有什么区别吗?我看着都一样
...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimyx123 2010-04-01
  • 打赏
  • 举报
回复
if (scale == this.scale)
return this;
同时还要注意下这个如果 scale参数与bd的一样的话 会直接返回bd
Dazzlingwinter 2010-04-01
  • 打赏
  • 举报
回复
太不小心了,呵呵,刚看了一下API,setScale是有返回值的,如果不接收返回值,意味着没有改变精度???

public class BigDecimalTest {
public static void main(String[] args) {
double pr = 0.056;
BigDecimal bd = new BigDecimal(Double.toString(pr));
System.out.println(bd.doubleValue());
bd.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(bd.doubleValue());
bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(bd.doubleValue());
}
}
/*
0.056
0.056
0.06
*/
jimyx123 2010-04-01
  • 打赏
  • 举报
回复
bd.setScale(2,BigDecimal.ROUND_HALF_UP);
是返回一个新的BigDecimal 而不是对bd进行修改
gaojava 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dazzlingwinter 的回复:]
Java code

import java.math.BigDecimal;


public class BigDecimalTest {
public static void main(String[] args) {
double pr =0.056;
BigDecimal bd=new BigDecimal(Double.toS……
[/Quote]
你第二个打印打错了,打成第一个了
Dazzlingwinter 2010-04-01
  • 打赏
  • 举报
回复

import java.math.BigDecimal;


public class BigDecimalTest {
public static void main(String[] args) {
double pr =0.056;
BigDecimal bd=new BigDecimal(Double.toString(pr));
bd.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(bd.doubleValue()); //0.056


double pr1 =0.056;
BigDecimal bd1=new BigDecimal(Double.toString(pr)).setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(bd.doubleValue());//0.06

}
}
/*
0.056
0.056
*/
声明JDK1.5,难道是愚人节的缘故???
gaojava 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dazzlingwinter 的回复:]
明显的
第二个设置精度为小数点后两位,并且采用四舍五入了
而第一个没有
[/Quote]

第一个也有 bd.setScale(2,BigDecimal.ROUND_HALF_UP);
Dazzlingwinter 2010-04-01
  • 打赏
  • 举报
回复
明显的
第二个设置精度为小数点后两位,并且采用四舍五入了
而第一个没有

62,622

社区成员

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

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