Расчет НДС всегда возвращается как 0 в c # - PullRequest
2 голосов
/ 13 января 2011
public string s()
{ 
  double price = 123.12
  double preVatPrice = (100 / (100 + 20) + price);

  return preVatPrice.ToString();
}

в c # это всегда возвращает как '0' любые идеи, почему?

Ответы [ 3 ]

8 голосов
/ 13 января 2011

Это целочисленное деление :

100 / (100 + 20)

Это приведет к 0.

Сделать это в:

100.0 / (100.0 + 20.0)

Чтобы убедиться, что все параметры являются типами с плавающей запятой.


Кстати, функция возвращает «123.12», когда я проверяю ее.


Обновление:

Как указано в нескольких комментариях - вы должны использовать decimal для денежных расчетов, хотя в этом случае это вряд ли будет проблемой.

Тип десятичного значения подходит для финансовых расчетов, требующих большого числа значащих целых и дробных цифр и без ошибок округления.

1 голос
/ 13 января 2011

Некоторые из ваших литералов - целые числа, используйте (100.0 / (100.0 + 20.0) + price), чтобы получить арифметику двойной точности.

0 голосов
/ 13 января 2011
double preVatPrice = ((double)100 / (100 + 20) + price);
...