c#100.11到100.15和100.16到100.20

Jat*_*rma 6 c#

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)

alz*_*mar 8

这应该给出期望的结果

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.751.0.

删除+0.5M遗嘱只会舍入到最接近的值(而不是向上舍入).


Dmi*_*nko 4

该问题急需样本;如果预期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)