我只想问一个关于Math.round方法的快速问题。我正在尝试计算两个整数的分数为双精度。等式如下:199/39。当我这样做时,它返回5.0作为答案。我知道答案应该是5.1,还有更多的小数。我被告知使用Math.round方法将它四舍五入到最接近的十分之一,但我不知道如何实现这一点。我应该将该double变量更改为int并使其成为int / int = int吗?我不确定Math.round如何工作以获得5.1,因为我读过它只会舍入到最接近的整数而不是小数点。任何帮助都会很棒。
P.S这是家庭作业,但我只是因为我在笔记,幻灯片或书中找不到有关如何使用Math.round的信息。
答案 0 :(得分:1)
您无需Math.round()
即可获得结果小数值。如果您将int
除以int
,您将获得int
。如果需要小数,则将double
强制转换为其中一个输入值。然后你会得到一个double
。
(double) 199 / 39
199.0 / 39
// both return
5.102564102564102
答案 1 :(得分:1)
我知道答案应该是5.1,还有更多的小数。
不应该使用整数除法。 5是对的。
如果需要浮点答案,则需要提供至少一个浮点操作数,例如: 199/39.0
。
然后,您可以使用System.printf()
或DecimalFormat.
你不能将浮点值本身舍入到小数位,因为它没有小数位,它有二进制位。
请参阅this question进行全面讨论,特别是我的答案。
答案 2 :(得分:0)
您的具体答案:
roundedNumber = (double)Math.round(unRoundedNumber * 10) / 10;
一般来说,等式是:
roundedNumber =
(double)Math.round(unRoundedNumber * Math.pow(10, digitsToRoundTo))
/ Math.pow(10, digitsToRoundTo);
答案 3 :(得分:0)
感谢所有帮助。看完你的帖子后再看一下我最后做了比率=((双)199/39)然后继续 比=(双)Math.round(比* 10)/ 10。这样做让我得到5.1我正在寻找。