#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: Покупка большего объема памяти обычно является лучшим подходом, чем потеря информации 🙂