我不是数学家,所以我很难想出计算将小数点数舍入到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;
}
答案 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;
}