首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java BigDecimal:舍入到最接近的整数值

Java BigDecimal:舍入到最接近的整数值
EN

Stack Overflow用户
提问于 2010-11-09 21:17:57
回答 5查看 199.6K关注 0票数 99

我需要以下结果

代码语言:javascript
复制
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00

.round()还是.setScale()?我该怎么做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-09 21:29:38

您可以使用setScale()将小数位数减少到零。假设value保存要四舍五入的值:

代码语言:javascript
复制
BigDecimal scaled = value.setScale(0, RoundingMode.HALF_UP);
System.out.println(value + " -> " + scaled);

使用round()稍微复杂一些,因为它需要您指定要保留的位数。在您的示例中,这将是3,但这并不是对所有值都有效:

代码语言:javascript
复制
BigDecimal rounded = value.round(new MathContext(3, RoundingMode.HALF_UP));
System.out.println(value + " -> " + rounded);

(请注意,BigDecimal对象是不可变的;setScaleround都将返回一个新对象。)

票数 170
EN

Stack Overflow用户

发布于 2010-11-09 21:51:37

如果我按照Grodriguez的回答

代码语言:javascript
复制
System.out.println("" + value);
value = value.setScale(0, BigDecimal.ROUND_HALF_UP);
System.out.println("" + value);

这是输出

代码语言:javascript
复制
100.23 -> 100
100.77 -> 101

这不是我想要的,所以我最终做了这件事..

代码语言:javascript
复制
System.out.println("" + value);
value = value.setScale(0, BigDecimal.ROUND_HALF_UP);
value = value.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("" + value);

这就是我所得到的

代码语言:javascript
复制
100.23 -> 100.00
100.77 -> 101.00

这解决了我现在的问题..:)谢谢大家。

票数 15
EN

Stack Overflow用户

发布于 2010-11-09 21:33:58

简单地看一下:

http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#ROUND_HALF_UP

和:

代码语言:javascript
复制
setScale(int precision, int roundingMode)

或者如果使用Java 6,那么

http://download.oracle.com/javase/6/docs/api/java/math/RoundingMode.html#HALF_UP

http://download.oracle.com/javase/6/docs/api/java/math/MathContext.html

或者:

代码语言:javascript
复制
setScale(int precision, RoundingMode mode);
round(MathContext mc);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4134047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档