打印的字符串中出现意外的数字格式

Posted

技术标签:

【中文标题】打印的字符串中出现意外的数字格式【英文标题】:Unexpected number formatting in printed String 【发布时间】:2014-12-19 12:16:40 【问题描述】:

我错误地在我的 JAVA 代码中输入了以下行并得到了令人惊讶的输出。任何人都可以帮助我了解它是如何发生的。

代码: System.out.printf("值:"+0.40+010+0.60);

输出: 值:0.480.6

【问题讨论】:

这和printf完全没有关系,只是运算符优先级和八进制数。 print("Value :"+(0.40+010+0.60)); --> Value :9.0 您好 Stewart/tobias_k,感谢您的回答。实际上,我正在寻找结果最终达到“值:0.480.6”的确切方式。从下面蒂勒的回答中可以清楚地看到。 【参考方案1】:

你看到了几件事:

    您正在将数字作为字符串添加到值字符串中。 您正在编写一个八进制数 (010),因为您以 0 开头文字数字,这实际上表示十进制的 8。 从文字中删除尾随十进制零。 (0.40 -> 0.4)

所以分几个步骤重写你的代码:

    "Value :"+0.40+010+0.60 "Value :0.4"+010+0.60 "Value :0.4"+8+0.60 "Value :0.48"+0.60 "Value :0.480.6"

【讨论】:

感谢 Thirler,这五个步骤中的一切都在那里 :)【参考方案2】:

您认为添加正在完成,但事实并非如此。这些是字符串。

第一个值为 0.4。

第二个值为010,表示八进制。这转化为十进制的 8。

第三个值为 0.6

您没有说出您期望看到的内容。如果你真的想要加法发生,我建议用括号括起来以使加法发生。您仍然需要确定该八进制值是故意的还是拼写错误。

【讨论】:

以上是关于打印的字符串中出现意外的数字格式的主要内容,如果未能解决你的问题,请参考以下文章

错误:我的代码中出现意外的符号/输入/字符串常量/数字常量/SPECIAL

打印存储为字符串的十六进制值会产生意外的输出

格式异常(格式异常:意外字符(在字符 1)json

打印字符串时出错:%d 格式:需要数字,而不是 str

有没有办法将格式化的 BigDecimal 数字分配给 BigDecimal?

统计字符在字符串中第n次出现的位置