C#midpointrounding降至零

时间:2012-10-01 19:55:50

标签: c#

我知道MidpointRounding.AwayFromZero和MidpointRounding.ToEven,但我想我想要介于两者之间。这是一个促销模块,因此如果价值为.5,折扣价必须向下舍入。

例如,我想:

£1.244 to round to £1.24
£1.245 to round to £1.24
£1.246 to round to £1.25

据我了解,.AwayFromZero将中间价值调整为1.25英镑.ToEven将正确地回合到1.24英镑,但1.335英镑将四舍五入到1.34英镑,而不是1.33英镑,这是我想要的。

有谁知道如何做到这一点?

谢谢,乔恩

3 个答案:

答案 0 :(得分:2)

有很多未指明的行为。让我们保持安全并明确地进行舍入,忽略否定因为这是关于金钱的:

    public static decimal Promotion(decimal value) {
        decimal unround = decimal.Floor(value * 100m);
        decimal fraction = value * 100m - unround;
        if (fraction <= 0.5m) return unround / 100m;
        else return (unround + 1m) / 100m;
    }

答案 1 :(得分:1)

Math.ceiling(x - 0.5)

应该做的伎俩。

答案 2 :(得分:0)

通常做这样的事情你从你的价值减去.001,然后正常地回合。

1.244 - .001 = 1.243 = 1.24
1.245 - .001 = 1.244 = 1.24
1.246 - .001 = 1.245 = 1.25

1.300 - .001 = 1.299 = 1.3

在这种情况下,你真的想把它放在它自己的函数/ extrension方法中,无论如何,带有函数的文档为什么你在舍入之前减去.001。