【问题标题】:Rounding a number to a smaller or bigger size with the same ratio以相同的比率将数字四舍五入为更小或更大的大小
【发布时间】:2013-05-07 05:54:26
【问题描述】:

我不知道如何很好地描述它(所以我无法查找)但我需要帮助。假设我在 0 到 200 中有 100 个,我如何将这个数字与 0 到 100 进行比值,这样它就像 50?简单地将数字比为更小或更大的大小?

【问题讨论】:

  • 您尝试过任何东西吗?我在这里没有看到任何编程问题..
  • 我不认为这是回答这个问题的地方,但可以试试 (x-x1)/(x2-x1)*(nx2-nx1) 之类的东西,它与 (100-0) 之类的东西有关/(200-0)*(100-0)

标签: c# math floating-point int


【解决方案1】:

计算原始最大值与新最大值的比值:

double k = (double)newMax / (double)oldMax

在您的示例中,您最终会得到值 0.5

然后将值乘以比率:

double newValue = value * k;

如果你想要一个整数值,将它四舍五入并转换为整数:

int newValue = (int)Math.Round(value * k);

【讨论】:

    【解决方案2】:

    一般来说,当“旧”和“新”尺度上的最小值不一定为 0 时,解决方案如下:

    比率 = ( oldValue - oldMin ) / ( oldMax - oldMin )

    newValue = newMin + (newMax - newMin) * 比率

    【讨论】:

      【解决方案3】:
      double myRatio, maxValue, newValue;
      //value retrieval logics.
      double result = (myRatio / maxValue) * newMaxValue;
      

      你必须填写第一行的双打。 这是我想说的最短的代码。

      【讨论】:

        【解决方案4】:
        ((Max - value) / Max) * (newMax)
        

        【讨论】:

        • 没有。这仅在该值恰好是最大值的一半时才有效。但是如果最小值为零,(value/Max) * newMax 会起作用。
        猜你喜欢
        • 2015-06-17
        • 2021-08-01
        • 2020-10-22
        • 1970-01-01
        • 2011-12-31
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多