C # преобразовать double в float, как удалить мусор после седьмого места

#c# #floating-point #double

#c# #с плавающей запятой #double

Вопрос:

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

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

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

Спасибо

Ответ №1:

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

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

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

Комментарии:

1. Хорошо, но что с местом в памяти. Float равен 4 байтам, double равен 8 байтам. Использование double занимает больше места в памяти

2. @Robert: Покупка большего объема памяти обычно является лучшим подходом, чем потеря информации 🙂