• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用内联条件语句格式化小数

java 来源:bradvido 3次浏览

我想知道为什么与下面的代码不一致。我期望得到相同的输出,但是当使用内联条件语句时,它会向该字符串附加一个.0。 我的代码中有一些错误吗?使用内联条件语句格式化小数

double d = 10.1; 

    String rounded = (false ? d : Math.round(d)) + ""; 
    System.out.println(rounded);//10.0 

    rounded = Math.round(d) + ""; 
    System.out.println(rounded);//10 

===========解决方案如下:

Math.round返回long,因此条件运算符的两个操作数不具有相同的类型,并因此更复杂的规则之后,以确定总体操作的类型,如在JLS §15.25定义:

否则,对操作数 类型应用二进制数字提升(第5.6.2节),并且条件表达式的类型是第二个和第三个操作数的提升类型 。请注意,二进制数字提升 执行拆箱转换(第5.1.8节)和值集转换 (第5.1.13节)。

而且从5.6.2,二进制数值提升:

如果操作数的类型是双,其他被转换为加倍。


,并说明该缺陷与条件运算符和一些有趣的,从Java puzzlers(拼图8):

char x = 'X'; 
int i = 0; 
System.out.print(true ? x : 0); // prints X 
System.out.print(false ? i : x); // prints 88 => (int)X 

此外,检查出的Hamlet和Elvis例子(视频链接) 。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)