我想在没有round() - Method的情况下手动舍入。
所以我可以告诉我的程序这是我的号码,在这一点上我希望你回合。
我举几个例子:
输入数量:144
输入舍入:2
输出舍入数:140
输入数字:123456
输入舍入:3
输出四舍五入:123500
作为一个小插件可能会在逗号后面:
输入数量:123.456
输入舍入:-1
输出四舍五入的数字:123.460
我不知道如何开始编程...... 有谁知道如何开始解决这个问题?
感谢您帮助我:)
我想学习更好的编程,所以我不想使用这一轮并制作自己的编程,所以我可以理解它更好的方式:)
答案 0 :(得分:2)
一种简单的方法是:
让我举个例子:
您希望将数字1234.567
四舍五入到两个小数位(所需结果为1234.57
)。
x = 1234.567;
p = 2;
x = x * pow(10, p); // x = 123456.7
x = floor(x + 0.5); // x = floor(123456.7 + 0.5) = floor(123457.2) = 123457
x = x / pow(10,p); // x = 1234.57
return x;
当然,您可以将所有这些步骤合二为一。我一步一步地告诉你它是如何工作的。在紧凑的Java形式中,它将类似于:
public double roundItTheHardWay(double x, int p) {
return ((double) Math.floor(x * pow(10,p) + 0.5)) / pow(10,p);
}
对于整数位置,您可以轻松检查这是否也有效(使用p < 0
)。
希望这有帮助
答案 1 :(得分:1)
答案 2 :(得分:1)
public static int round (int input, int places) {
int factor = (int)java.lang.Math.pow(10, places);
return (input / factor) * factor;
}
基本上,它的作用是将输入除以因子,然后再乘以。当用Java这样的语言划分整数时,从结果中删除除法的其余部分。
编辑:代码有问题,修好了。此外,java.lang.Math.pow使得你获得10到n次幂,其中n是places
的值。在OP的例子中,要考虑的地方数量增加了一个。
重新编辑:正如评论中指出的那样,上面会给你 floor ,即舍入下来的结果。如果您不想总是向下舍入,则还必须将模数保留在另一个变量中。像这样:
int mod = input % factor;
如果您想要始终获得上限,即舍入向上,请检查mod
是否为零。如果是的话,请保持原样。否则,请将factor
添加到结果中。
int ceil = input + (mod == 0 ? 0 : factor);
如果你想要舍入到最近的,那么如果mod
小于factor
/ 2,那么请发言,否则就是天花板。
答案 3 :(得分:0)
将“输入舍入”除以10 - 1(144 /(10 *(2 - 1))除以(正)/乘(负)。在这种情况下,这将给你相同的结果。得到其余的最后一个数字(4)。确定它是否大于或等于5(小于)。使其等于0或加10,取决于先前的答案。乘以/将其除以“输入舍入”时间10 - 这应该会给你你的价值。
如果这是作业。目的是教你自己思考。我可能已经给你答案,但你仍然需要自己编写代码。
下次,你应该编写自己的代码并询问出错了什么
答案 4 :(得分:0)
对于整数,一种方法是使用mod运算符(百分号%)和除运算符的组合。在您的第一个示例中,您将计算144%10,结果为4.并计算144/10,得到14(作为整数)。您可以将mod操作的结果与分母的一半进行比较,以确定是否应该将14舍入到15或不(在这种情况下不是),然后再乘以分母得到答案。
在伪代码中,假设n是要舍入的数字,p是10的幂,表示有效数字的位置:
denom = power(10, p)
remainder = n % denom
dividend = n / denom
if (remainder < denom/2)
return dividend * denom
else
return (dividend + 1) * denom