我怎样才能手动圆?

时间:2013-05-07 18:44:55

标签: java math rounding

我想在没有round() - Method的情况下手动舍入。 所以我可以告诉我的程序这是我的号码,在这一点上我希望你回合。 我举几个例子:
输入数量:144
输入舍入:2
输出舍入数:140

输入数字:123456
输入舍入:3
输出四舍五入:123500

作为一个小插件可能会在逗号后面: 输入数量:123.456
输入舍入:-1
输出四舍五入的数字:123.460

我不知道如何开始编程...... 有谁知道如何开始解决这个问题?

感谢您帮助我:)

我想学习更好的编程,所以我不想使用这一轮并制作自己的编程,所以我可以理解它更好的方式:)

5 个答案:

答案 0 :(得分:2)

一种简单的方法是:

  1. 将数字除以十次
  2. 通过任何所需方法进行舍入
  3. 在步骤1中将结果乘以10的相同幂
  4. 让我举个例子:

    您希望将数字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)

如果您需要一些建议如何开始,

  • 逐步记下计算你需要做什么才能从144,2获得 - &gt; 140
  • 用java命令替换你的数学,这应该很简单,但如果你有问题,只需查看herehere

答案 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