【问题标题】:Rounding off to nearest 0.5 in matlab在matlab中四舍五入到最接近的0.5
【发布时间】:2013-03-26 22:57:05
【问题描述】:

如何在 matlab 中将小数四舍五入到最接近的 0.5?例如。我希望将 16.625 四舍五入为 16.5

【问题讨论】:

    标签: matlab math


    【解决方案1】:

    同样的逻辑,同样的问题被问到C#

    result = round(value*2)/2;
    

    并且概括一下,根据aardvarkk的建议,如果要四舍五入到最接近的精度acc,例如acc = 0.5

    acc = 0.5;
    result = round(value/acc)*acc;
    

    【讨论】:

    • 这给出了正确的答案——我的没有!我会删除我的,但我建议您概括结果(即,如果我们想四舍五入到最接近的 0.05 怎么办......)
    • 是的,我实际上是在为您的答案输入评论,我会编辑我的。
    • 要从输出中去除数字噪声,您可以通过指定小数位数再次对其进行舍入(Matlab 2018 支持此功能)。结果 = 圆形(acc*round(值/acc),1);这将确保一个数字。 .499999 和 .5000001 等将四舍五入为 .5
    【解决方案2】:

    如果您采用乘以 2 - 舍入 - 除以 2 的方式,您可能会遇到一些(非常小的)数字错误。您可以使用mod 来避免这种情况:

    x = 16.625; 
    dist = mod(x, 0.5); 
    floorVal = x - dist; 
    newVal = floorVal; 
    if dist >= 0.25, newVal = newVal + 0.5; end
    

    你可以用更少的步骤来完成,但在这里我把它分解了,这样你就可以看到每个步骤的作用。

    【讨论】:

      【解决方案3】:
      a=16.625;
      b=floor(a);
      if abs(a-b-0.5) <= 0.25
        a=b+.5;
      else
        if a-b-0.5 < 0
          a=b;
        else
          a=b+1;
        end
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-20
        • 2012-01-29
        • 2021-09-05
        • 2020-04-01
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多