Не «двойная» проблема, а «десятичная» проблемаC#

Место общения программистов C#
Anonymous
Не «двойная» проблема, а «десятичная» проблема

Сообщение Anonymous »

В последнее время я снова экспериментировал с типами данных double и decimal в C#. Насколько я понял, десятичную дробь следует использовать в тех случаях, когда следует избегать ошибок округления десятичной дроби, например, в финансовых расчетах.
Поэтому я искал демонстрационный пример, показывающий эту десятичную дробь. на самом деле лучше, чем double, когда дело касается ошибок округления. Я придумал такой расчет: разделите 1 на 3 и умножьте результат на 4,5. Конечным результатом должно быть 1,5.
Поэтому я выполнил следующий код C# в консольном приложении, чтобы можно было сравнить десятичное и двойное:

Код: Выделить всё

Console.WriteLine($"Double result: {1.0 / 3.0 * 4.5}");
Console.WriteLine($"Decimal result: {1m / 3m * 4.5m}");
Результаты меня поразили!:

Код: Выделить всё

Double result: 1.5
Decimal result: 1.4999999999999999999999999998
При округлении до целых значений двойной результат округляется до 2, а десятичный результат округляется до 1...
Почему используется здесь неверный десятичный тип?

Подробнее здесь: https://stackoverflow.com/questions/786 ... al-trouble

Вернуться в «C#»