C # конвертировать double в float, как убрать мусор после седьмого места - PullRequest
0 голосов
/ 02 ноября 2011

У меня в базе данных есть поле под названием Прибыль.В моем приложении я рассчитал прибыль:

myFunds.Profit = float.Parse(Math.Round(myFunds.Profit.Value * myFunds.Stake / myFunds.Stake, 3, MidpointRounding.AwayFromZero).ToString());

Тип myFunds.Profit is int ?.Возвращаемое значение Math.Round как двойное и приводится к плавающему значению.В базе данных прибыль сохраняется как 5,40000009536743.Я знаю, что float имеет меньшую точность, чем double.Это возможность вырезать числа после седьмого знака после запятой?

Спасибо

1 Ответ

14 голосов
/ 02 ноября 2011

Вы не должны использовать двоичную с плавающей точкой для валюты, в основном. Используйте что-то, что сохраняет десятичные цифры вместо двоичного представления. Дело не в том, чтобы быть "мусором после седьмой цифры" - это вопрос использования неправильного представления для начала.

См. Мои статьи о двоичной с плавающей запятой и десятичной с плавающей запятой для получения дополнительной информации.

Это действительно важно, чтобы вы понимали различия, и почему просто недопустимо использовать двоичную плавающую точку для денежных значений с точными значениями, которые не могут быть представлены в двоичной плавающей точке. Не пытайтесь обойти проблемы, возникающие у вас с float и double - вместо этого перейдите к соответствующему типу данных. Это может быть больше работы в краткосрочной перспективе, но это будет значительно предпочтительнее в долгосрочной перспективе.

...