将双精度值四舍五入到以.0或.5结尾的值

本文关键字:结尾 双精度 四舍五入 | 更新日期: 2023-09-27 18:05:28

我正在尝试将一些值四舍五入作为以下示例,并需要一些帮助来编写数学计算:

input -> 25 ÷ 4 = 6.25        output -> 6.5
input -> 15.5 ÷ 4 = 3.875     output -> 4.0
input -> 24.5 ÷ 4 = 6.125     output -> 6.0

谁知道怎么写循环数学程序?!

将双精度值四舍五入到以.0或.5结尾的值

应该可以了。

double Divide(double numerator, double denominator)
{
    double result = numerator / denominator;
    //round to nearest half-integer
    result = Math.Round(result * 2, MidpointRounding.AwayFromZero) / 2;
    // due to peculiarities of IEEE754 floating point arithmetic
    // we need to round again after dividing back by two
    // to avoid a result like 1.49999999.
    return Math.Round(result, 1);
}

很抱歉没有意识到您遇到的困难,所以我猜可能是不同类型的浮点数。下面的代码就是这样做的:

public static decimal RoundedDivide<T>(T a, T b) {
    var x=2*Convert.ToDecimal(a)/Convert.ToDecimal(b);
    x=((int)(.5m+x)>x?1:0)+(int)x;
    return x/2;
}

有两点需要注意:

  1. 我不能绑定ValueType的约束,所以如果你传递引用类型的对象,它可能会抛出
  2. 如果您希望double作为返回类型,那么只需更改它,并将.5m更改为.5, Convert.ToDecimal更改为Convert.ToDouble