回合25,50,75,100

时间:2016-03-12 07:34:20

标签: c# math rounding

我不是数学家,所以我很难想出计算将小数点数舍入到25,50,75和100。这不是典型的回合因为小数不会减少但只会增加。

示例:

如果是11.12,则回合到11.25

如果是11.34,则转为11.50

如果为11.52,则为11.75

如果是11.76,则转到12.00

这是我的开始方法:

public float RoundNearestCents(String price)
    {
        float srp;

        return srp;
    }

5 个答案:

答案 0 :(得分:5)

public float RoundNearestCents(double d)
{
  return (double)(Math.Ceiling(d * 4)) / 4;
}

答案 1 :(得分:2)

我会用这样的东西:

float RoundNearestCents(float price)
    {
    price*=(100/25.0); // now fractions are going away
    if (price-floor(price)>=0.5) price++; // round up if fraction above 0.5
    return floor(price)*(25.0/100.0); // cut of the fraction and restore original range
    }

答案 2 :(得分:2)

我的代码可能不是最好的,但它会起作用。 在你的函数中创建一个float和一个int。

public float RoundNearestCents(String price)
{
    float srp = float.Parse(price);
    int srp1 = Int32.Parse(price);
    if((srp-srp1)>=0.5) 
        srp1++;
    else 
        return srp1;
    return srp1;
}

int会截断小数部分,这就像铺设价格一样。

答案 3 :(得分:2)

我建议使用没有浮点的类型。

decimal RoundNearestCents(decimal price) {
    // no problems with floating point as all calculations are exact
    return Math.Floor((price * 100 + 24) / 25) * 25 / 100;
}
  

- 为什么你的价格字符串?

     

- 因为它来自文本框。

我假设您的文本框应支持将输入限制为最多2个小数位的十进制数。所以它的价值已经是decimal。但是我不知道你的应用程序类型是什么。如果您仍想接受string,请考虑使用decimal.TryParse方法将其转换为decimal

答案 4 :(得分:0)

这是一种方式:

public decimal RoundNearestCents(decimal price)
{
    decimal srp = price * 100;
    decimal m = srp % 25;
    srp = srp - m + (m > 0 ? 25 : 0);
    return srp / 100;
}