首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据最接近的十进制值进行舍入- java

问根据最接近的十进制值进行舍入- java
EN

Stack Overflow用户
提问于 2021-01-06 17:24:55
回答 3查看 62关注 0票数 2

我用过这个

代码语言:javascript
复制
Math.round(input * 100.0) / 100.0;

但它不能满足我的需求。我想根据最接近的小数点取整成两个小数点。

首先我想检查第四个十进制值,如果它是5或以上,我想把1加到第三个十进制值,然后想检查第三个,如果它是5或以上,我想把1加到第二个

例如:如果我有22.3246

请参考上面的示例编号。第四个十进制数是6。我们可以在第三个十进制值中加上1。

结果: 22.325

现在第三个十进制数是5。我们可以在第二个十进制数中加1。

结果: 22.33

我想要得到22.33的结果

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-06 17:53:39

如果你想尊重第四位小数,你可以这样做:

代码语言:javascript
复制
double val = Math.round(22.3246 * 1000.0) / 1000.0;
double result = Math.round(val * 100.0) / 100.0;
System.out.println(result); // print: 22.33
票数 3
EN

Stack Overflow用户

发布于 2021-01-06 18:00:03

您可以结合使用scale和RoundingMode.HALF_UP使用BigDecimal类来完成此任务。

示例代码:

代码语言:javascript
复制
System.out.println(new BigDecimal("22.3246").divide(BigDecimal.ONE,3,RoundingMode.HALF_UP)
                    .divide(BigDecimal.ONE,2,RoundingMode.HALF_UP));

输出:

代码语言:javascript
复制
22.33
票数 0
EN

Stack Overflow用户

发布于 2021-01-07 18:56:51

根据您的要求,要向下舍入到22.32的最大数字是22.3244444444...。从22.32444...4445开始,逐位迭代舍入将导致22.33。

因此,您可以添加一个偏差0.005 - 0.0044444444 (标准舍入阈值减去您的阈值),即为5/9000,然后以标准方式舍入到下一个1/100:

代码语言:javascript
复制
    double BIAS = 5.0 / 9000.0;
    double result = Math.round((input + BIAS) * 100.0) / 100.0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65593183

复制
相关文章

相似问题

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