c#100.11到100.15和100.16到100.20
我尝试了所有这些东西,但这些都没有帮助我.
Math.Round(100.11, 2,MidpointRounding.AwayFromZero); //gives 100.11
Math.Round(100.11, 2,MidpointRounding.ToEven);//gives 100.11
Math.Round((Decimal)100.11, 2)//gives 100.11
(100.11).ToString("N2"); //gives "100.11"
Math.Floor(100.11);// gives 100.0
(100.11).ToString("#.##");//gives "100.11"
Math.Truncate(100.11);// gives 100.0
Math.Ceiling(100.11);//gives 101.0
(100.11).ToString("F4");// gives "100.1100"
Run Code Online (Sandbox Code Playgroud)
这应该给出期望的结果
decimal Round (decimal value, decimal granularity)
{
return Math.Ceiling(value/granularity+0.5M)*granularity;
}
// myResult = Round(110.11,0.05);
// myResult = Round(110.16,0.05);
Run Code Online (Sandbox Code Playgroud)
通常:将粒度设置为您希望舍入值的十进制值,例如0.1将舍入到最接近的小数.您也可以申请奇数值一样0.25,这将四舍五入到0.25,0.50,0.75和1.0.
删除+0.5M遗嘱只会舍入到最接近的值(而不是向上舍入).
该问题急需样本;如果预期delta向上舍入等于1/20 ,即:
100.10 -> 100.10
100.11 -> 100.15 // <- round UP; that's why 100.15 not 100.10
...
100.15 -> 100.15
100.16 -> 100.20
...
100.20 -> 100.20
100.21 -> 100.25
Run Code Online (Sandbox Code Playgroud)
你可以使用这个简单的代码
Double value = 100.11;
Double result = Math.Round(value * 20.0 + 0.49999999) / 20.0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |