Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 总是将C中的值四舍五入#_C#_Double_Decimal_Roundup - Fatal编程技术网

C# 总是将C中的值四舍五入#

C# 总是将C中的值四舍五入#,c#,double,decimal,roundup,C#,Double,Decimal,Roundup,我想根据第三个小数点对值进行取整。它应该始终采用上行值和四舍五入。我用了数学,但并没有产生我预期的结果 情景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可以。它正在产

我想根据第三个小数点对值进行取整。它应该始终采用上行值和四舍五入。我用了数学,但并没有产生我预期的结果

情景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

无论第三个小数点是什么(无论是小于5还是大于5),它都应该向上取整

谁能给我一个解决方案?我不认为数学对我有帮助。

这个怎么样:

Math.Round(Value+0.005,2)

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

Math.Ceiling(value2 * 100) / 100
var值2=2.524;
var result2=数学四舍五入(值2,2)//预期:2.53/实际:2.52
如果(结果2<值2)
结果+=0.01;//实际2.53

最后我想出了一个解决方案。我改进了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;
}
var值=2.524;
var结果=舍入值(值,2);//答案是2.53
公共双舍入值(双值,整数小数点)
{
var结果=数学四舍五入(数值,小数点);
如果(结果<值)
{
结果+=数学功率(10,-小数点);
}
返回结果;
}

如果您对小数点感兴趣,也许您应该使用
decimal
类型,而不是
double
?你想表达什么样的价值?“但它并没有产生我所期望的结果。”-老实说,“总是向上取整”并不是很多人所期望的结果。也值得指出的是,数学。取整通常被误解:注意,在进行此操作时,你需要强制中点向下取整,否则0.000可能会向上;没有“向下”
middpointrounding
mode…@SonerGönül这是一个非常常见的技巧;天花板版本更好,虽然看起来像是四舍五入到2dp,如果第三个dp>0,则总是四舍五入到第三个dp。虽然这个值应该是+0.005-EPSILON?O.O.根据我提出的问题,这是正确的(比较小数点后三位的四舍五入值)。
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;
}