始终在C#中舍入一个值

时间:2014-02-06 09:44:59

标签: c# double decimal roundup

我想根据第3个小数点对值进行综合。应始终采用UP值并进行舍入。我使用了Math.Round,但它没有像我预期的那样产生结果。

情景1

var value1 = 2.526;
var result1 = Math.Round(value1, 2); //Expected: 2.53 //Actual: 2.53

场景2

var value2 = 2.524;
var result2 = Math.Round(value2, 2); //Expected: 2.53 //Actual: 2.52

场景1没问题。正如我预期的那样产生结果。 在第二个场景中,我的金额为2.522。我想考虑第三个小数点(在这种情况下是'4')它应该向上舍入。预期结果为2.53

无论小数点是3(小于5还是小于5),它都应该总是向上舍入。

有人能为我提供解决方案吗?我不认为Math.Round在这里帮助我。

4 个答案:

答案 0 :(得分:8)

正如乔恩所说,用小数代替。然后你可以这样做,总是向上舍入2个小数点。

Math.Ceiling(value2 * 100) / 100

答案 1 :(得分:4)

var value2 = 2.524;
var result2 = Math.Round(value2, 2); //Expected: 2.53 //Actual: 2.52
if(result2 < value2)
    result += 0.01; // actual 2.53

答案 2 :(得分:3)

最后,我想出了一个解决方案。我改进了Sinatr的答案如下,

var value = 2.524;
var result = RoundUpValue(value, 2); // Answer is 2.53

public double RoundUpValue(double value, int decimalpoint)
{
    var result = Math.Round(value, decimalpoint);
    if (result < value)
    {
        result += Math.Pow(10, -decimalpoint);
    }
    return result;
}

答案 3 :(得分:0)

这个怎么样:

Math.Round(Value+0.005,2)