5

我想在没有 round() 方法的情况下手动舍入。所以我可以告诉我的程序那是我的号码,在这一点上我希望你四舍五入。让我举几个例子:
输入数字:144
输入四舍五入:2
输出四舍五入:140

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

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

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

谢谢你帮助我:)

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

4

5 回答 5

2

一个简单的方法是:

  1. 将数字除以十的幂
  2. 用任何所需的方法对其进行四舍五入
  3. 在步骤 1 中将结果乘以相同的 10 次方

让我给你看一个例子:

您希望将数字四舍五入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)。

希望这可以帮助

于 2013-05-07T19:00:23.790 回答
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 的示例中,要考虑的位置数增加了 1。

重新编辑:正如评论中指出的那样,上面将为您提供发言权,即四舍五入的 结果。如果您不想总是向下舍入,则还必须将模数保存在另一个变量中。像这样:

int mod = input % factor;

如果你想总是得到上限,即四舍五入检查是否mod为零。如果是的话,就这样吧。否则,添加factor到结果中。

int ceil = input + (mod == 0 ? 0 : factor);

如果要四舍五入到最近,则如果mod小于factor/ 2,则获取地板,否则获取天花板。

于 2013-05-07T19:02:20.033 回答
1

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

  • 一步一步写下计算你需要做什么才能从 144,2 --> 140
  • 用 java 命令替换你的数学,这应该很容易,但是如果你有问题,看看 这里这里
于 2013-05-07T18:58:17.293 回答
0

将(正)/乘(负)除以“输入舍入”乘以 10 - 1 (144 / (10 * (2 - 1))。在这种情况下,这将为您提供相同的结果。获取最后一位数字的余数( 4). 确定它是否大于或等于 5(小于)。使其等于 0 或加 10,具体取决于先前的答案。将其乘/除以“输入舍入”乘以 10 - 1。这应该给你你的价值。

如果这是为了家庭作业。目的是教你独立思考。我可能已经给你答案了,但你仍然需要自己编写代码。

下一次,你应该写你自己的代码,并问什么问题

于 2013-05-07T18:59:16.660 回答
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
于 2013-05-07T19:47:41.603 回答