Укушен округлением деления? - PullRequest
3 голосов
/ 17 августа 2010

Почему следующий код:

Console.WriteLine(String.Format("{0:C0}", 2170/ 20));

дают $ 109, а

Console.WriteLine(Math.Round(2170 / 20));

дает мне 108?

Как я могу получить 2170/20, дать мне 109?

Ответы [ 2 ]

4 голосов
/ 17 августа 2010

При делении на значения целочисленного типа, такие как 2170 и 20, среда выполнения выполняет целочисленное деление и отбрасывает (усекает) десятичное число.

Если изменить один из операндов наfloat, double или decimal (например, 2170.0 / 20 или 2170 / 20m), он будет выполнять деление с плавающей запятой, как и следовало ожидать.

Поэтому вам нужноизменить его на

Console.WriteLine(Math.Round(2170.0 / 20));

РЕДАКТИРОВАТЬ

Как это:

Math.Round(2170m / 20, MidpointRounding.AwayFromZero)
0 голосов
/ 17 августа 2010

Попробуйте Math.Round (2170.0 / 20.0)

...