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

JavaMath RoundingMode.HALF_EVEN打印意外结果[重复]

阮俊弼
2023-03-14

我试图调试HALF\u甚至i java的舍入问题,正如您在下面看到的,意外的结果是377.35,我们可以预期它会打印377.34?

有人能解释一下这种行为吗?

public static void main(String[] args) {


    System.out.println((new BigDecimal(0.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    //prints 0.34

    System.out.println((new BigDecimal(77.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    //prints 77.34

    System.out.println((new BigDecimal(377.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    **//prints 377.35 ?????**

    //anything larger than 256 is printing .35 
    System.out.println((new BigDecimal(255.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    //prints 255.34 

    System.out.println((new BigDecimal(256.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    **//prints 256.35 ?????** 


}

共有1个答案

陆宏扬
2023-03-14
new BigDecimal(377.3450)

仅此行就失去了BigDecimal的所有优势,因为您首先传入了双精度,这会执行您不希望的所有舍入。

而是写,

new BigDecimal("377.3450")

...并且通常在任何地方都使用构造函数。在得到“正确”答案的情况下,浮点四舍五入很幸运,并朝着正确的方向发展。

 类似资料:
  • 对于一个类,我得到了一个由base64编码的salted sha-256散列密码组成的文件。 文件的格式为: 用户名:base64编码sha256密码:salt 我最初的想法是用base64对哈希进行解码,这样我就可以得到: 用户名:salted散列密码:salt 然后通过JTR或hashcat运行它来破解密码。 我的问题是在base64解码过程中。 我的代码看起来像: /*备选方案#1:为散列*

  • 问题内容: 给定一个变量,该变量包含巴黎时区的日期时间2000-01-01 00:01(冬季afaik中为UTC + 2): 我希望转换为UTC会导致日期时间为1999-12-31 22:01,但是却得到了: 我想念什么? 谢谢 问题答案: 不幸的是 ,在许多时区使用标准构造函数的参数“不起作用” 。 但是对于没有夏令时转换的时区来说是安全的,例如UTC: 您会注意到: “ LMT + 0:09:

  • 我有以下代码: 为什么它会打印Java流?

  • 我有以下代码,它将标记字符串以创建对象列表: 我预期的输出是 1#、#Jon#、#176 2#、#Jack#、#200 3#、#Jimmy#、#160 如果我把内部分界线更改为类似的东西,它会正常工作为什么会发生这种行为?

  • 我正在用Enthuware的模拟测试学习1z0-809 : Java SE 8程序员II。 遇到这个问题。 上面哪个语句会打印9? 答案是 1和3 但是还有别的东西。我不明白为什么 我试图使用调试它,但这并不能帮助我理解。 我尝试使用< code>Integer::max和< code>Integer::compare对< code>ls进行排序 当然,我知道< code>Integer::max

  • 问题内容: 我试图从我的postgres数据库中检索一些数据,并将它们打印为json。我成功地在没有json的情况下打印了它们,但我在json中需要它们。 main.go: 这是我访问localhost:1337 / db时得到的 这是终端上的输出: 有人知道是什么问题吗? 问题答案: 该包使用反射(结构的包),以存取字段。您需要导出结构的字段以使其起作用(以大写字母开头): 扫描时: 引用自: