首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用java舍入.5

用java舍入.5
EN

Stack Overflow用户
提问于 2014-12-12 19:29:33
回答 3查看 5.9K关注 0票数 3

您如何实现一个舍入函数,它将像往常一样对所有数字进行四舍五入,除了0.5或它的任何奇数下降到最接近的整数?

例如:

  • 2.899将被舍入到3.0
  • 2.332将四舍五入到2.0
  • 2.5也被舍入到2.0 (而不是3.0)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-12 19:34:53

您可以按以下方式使用BigDecimal

代码语言:javascript
复制
public static double roundHalfDown(double d) {
    return new BigDecimal(d).setScale(0, RoundingMode.HALF_DOWN)
                            .doubleValue();
}

示例:

代码语言:javascript
复制
for (double d : new double[] { 2.889, 2.332, 2.5 })
    System.out.printf("%.2f  ->  %.2f%n", d, roundHalfDown(d));

输出:

代码语言:javascript
复制
2.89  ->  3.00
2.33  ->  2.00
2.50  ->  2.00
票数 10
EN

Stack Overflow用户

发布于 2014-12-12 19:55:59

在Math.floor()的帮助下,您可以相当容易地确定小数部分,然后在小数部分的基础上从小数部分开始:

代码语言:javascript
复制
public static double roundHalfDown(double d) {
    double i = Math.floor(d); // integer portion
    double f = d - i; // fractional portion
    // round integer portion based on fractional portion
    return f <= 0.5 ? i : i + 1D;
}
票数 4
EN

Stack Overflow用户

发布于 2014-12-12 19:32:10

您必须使用BigDecimal,在这里查看MathContext:

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

不同舍入方式下的舍入操作综述

使用这些类,循环工作如下

代码语言:javascript
复制
Input HALF_DOWN
5.5     5   
2.5     2   
1.6     2   
1.1     1   
1.0     1   
-1.0    -1  
-1.1    -1  
-1.6    -2  
-2.5    -2  
-5.5    -5  
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27450766

复制
相关文章

相似问题

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