当前位置: 首页 > 知识库问答 >
问题:

我得到错误的输出与BigDecimalROUND_HALF_EVEN舍入?

韩鸿波
2023-03-14

我对使用此处描述的“舍入半偶数”对大十进制数进行舍入有问题。

我想四舍五入到小数点后两位:

BigDecimal number1 = new BigDecimal("23.867995");
BigDecimal number2 = new BigDecimal("23.868");
Log.d("tag", number.setScale(2, BigDecimal.ROUND_HALF_EVEN) + ", " + );

输出:

23.87

但是数字是偶数,所以它应该是23.86还是不是?

共有1个答案

钱震博
2023-03-14

它是圆的一半,不是圆的一半。当一个数字介于两个选项之间时,它会向偶数进位。如果它比另一个选项更接近一个选项,它会选择更接近的选项。

 类似资料:
  • 这里我试图测试我的对象是否等于! 关于这个数组,输出应该是: true False False 但我得到了以下输出: False False False 为什么第一个相等是假的? 下面是IntegerArray类的实现: *注意:该类必须是不可变的

  • 我试图做一个java程序,但我有一个问题与输出。

  • 问题:基于PersonDto中存在的规则值,我正在应用这些规则。在Rule1类中,我有一个修改id字段的逻辑。我正在设置新的id,我得到作为参数。 最后,我将结果存储到ArrayList中。 但是在ArrayList中,所有PersonDto的值都是我在应用规则时传递的最后一个id值。 例如: 正如您在上面的代码片段中所看到的,有两个ID10001和10002,但是当存储并打印结果时,所有元素中的

  • 我得到一个错误java。lang.OutOfMemoryError(无错误消息),同时生成我的项目的签名Android应用程序包(AAB)。这是完整的错误消息- ***任务“:app:signReleaseBundle”的执行失败。 执行com.android.build.gradle.internal.tasks.FinalizeBundleTask$BundleToolRunnablejava

  • 我有以下C代码: 当我为两个scanf输入正常整数和双精度值时,它运行良好。但是我想让它更健壮。如果我为int scanf输入一个十进制值,代码将直接跳到下一个printf,并跳过scanf以获得double。它将我在int中输入的小数部分打印为双精度值。 eg: hello world,我是一个返回值为10的函数 现在输入一个值:44.67 所以您输入了值:44 现在输入一个双精度值:直到4的双

  • 问题内容: 在我的课程中,我被告知: 连续值大约在内存中表示,因此使用浮点数进行计算会产生舍入误差。这些是位模式的微小差异。因此,如果和为浮点,则测试是不安全的。 指的是Java。 这是真的?我已经将比较语句与s和s一起使用,并且从未遇到过舍入问题。我从来没有读过类似的教科书。虚拟机肯定占了这一切吗? 问题答案: 是真的。 这是如何在内存中以有限数量的位表示浮点值的固有限制。 例如,该程序显示“