1

我只是想问一个关于 Math.round 方法的快速问题。我正在尝试将两个整数除以双精度数。等式如下所示:199/39。当我这样做时,它会返回 5.0 作为答案。我知道答案应该是带有更多小数的 5.1。有人告诉我使用 Math.round 方法将其四舍五入到最接近的十分之一,但我不知道如何实现这一点。我应该将该双变量更改为 int 并使其为 int/int=int 吗?我不确定 Math.round 是如何获得 5.1 的,因为我读过它只四舍五入到最接近的整数而不是小数点。任何帮助都会很棒。

PS 这是家庭作业,但我之所以这么问,只是因为我在笔记、幻灯片或书籍中找不到有关如何使用 Math.round 的任何信息。

4

4 回答 4

1

您不需要Math.round()得到最终的十进制值。如果你将一个int除以一个int,你会得到一个int。如果您想要小数,则double转换为输入值之一。然后你会得到double一个结果。

(double) 199 / 39
199.0 / 39

// both return
5.102564102564102
于 2013-10-19T01:15:36.070 回答
1

我知道答案应该是带有更多小数的 5.1。

不是整数除法,它不应该。5 是正确的。

如果您想要一个浮点答案,您需要提供至少一个浮点操作数,例如199/39.0.

然后,您可以使用System.printf()DecimalFormat.

您不能将浮点值本身四舍五入到小数位,因为它没有小数位,它有二进制位。

请参阅此问题以进行完整讨论,尤其是我的回答。

于 2013-10-19T01:15:37.030 回答
0

感谢所有的帮助。在阅读了您的帖子并查看了更多内容后,我最终执行了 ratio=((double)199/39),然后执行 ratio=(double)Math.round(ratio*10)/10。这样做让我得到了我正在寻找的 5.1。

于 2013-10-19T01:22:23.247 回答
0

你的具体回答:

roundedNumber = (double)Math.round(unRoundedNumber * 10) / 10;

一般来说,方程是:

roundedNumber = 
(double)Math.round(unRoundedNumber * Math.pow(10, digitsToRoundTo)) 
/ Math.pow(10, digitsToRoundTo);
于 2013-10-19T01:13:33.700 回答