Не «двойная» проблема, а «десятичная» проблема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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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