我知道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英镑,这是我想要的。
有谁知道如何做到这一点?
谢谢,乔恩
答案 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。