C#如何始终向下舍入到最近的50?

25
我已经搜索了C#的四舍五入,但是没有找到解决我的问题的答案。
我的目标是始终向下舍入到最接近50的整数。我要舍入的所有值都将为小数。
所以635.25将变为600。
298.42将变为250。
149.56将变为100。
我看过math.round,但如何使用它使其始终向下舍入到最接近50的整数而不是向上?

这是一个非常流行的问题。一个例子:https://dev59.com/3HE85IYBdhLWcg3wVh84 - Jason Evans
这更像是一个数学问题,而不是一个编程问题。 - Adriano Carneiro
3
鉴于编程语言在处理这个问题时的方式不同(也许与此示例不同,在存在负数的情况下),我不得不持有异议。 - leppie
我一直在寻找能够四舍五入并向下取整而不仅仅是向下取整的函数,错过了这个,谢谢。 - saintsfanuk
@leppie 同意。这就是为什么我说它是“更多的数学问题”,而不是“绝对的数学问题”。 - Adriano Carneiro
3个回答

49
将该值除以50,向下取整到最接近的整数,然后再乘以50:
double n = Math.Floor(n / 50.0) * 50.0;

没有注意到永远不会四舍五入加1 :) - leppie
噢,好吧,加了一个备选方案;)如果你对微小优化感兴趣,可能会更便宜;p - leppie
就像在我的情况下一样,如果你需要将数字四舍五入到下一个50,可以使用Math.Ceiling()函数。 - undefined

5

另一种使用Guffa的方法:

(((int) value) / 50) * 50

这与Guffa的答案不同。负数在此处向上舍入。 - Jens
@Jens:给定正数,这是一样的 :) - leppie

4

使用取模运算:

var roundedDownToClosestFifty = value - (value % 50);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接