Почему делает Систему C#. Десятичное число помнит конечные нули?

Есть ли причина что Система C#. Decimal помнит количество конечных нулей, с которыми оно вводилось? Посмотрите следующий пример:

public void DoSomething()
{
    decimal dec1 = 0.5M;
    decimal dec2 = 0.50M;
    Console.WriteLine(dec1);            //Output: 0.5
    Console.WriteLine(dec2);            //Output: 0.50
    Console.WriteLine(dec1 == dec2);    //Output: True
}

Десятичные числа классифицируются, поскольку равный, все же dec2 помнит, что вводился с дополнительным нулем. Какова причина/цель этого?

18
задан Robert Davey 8 June 2010 в 11:17
поделиться

3 ответа

Может быть полезно представлять число включая его точность - так 0.5m может использоваться для обозначения "все, что между 0.45m и 0.55m" (с соответствующими ограничениями) и 0.50m может использоваться для обозначения "все, что между 0.495m и 0.545m".

Я подозреваю, что большинство разработчиков на самом деле не используют эту функциональность, но я вижу, как она может быть иногда полезна.

Я считаю, что эта возможность впервые появилась в .NET 1.1 - я думаю, что десятичные числа в 1.0 всегда эффективно нормализовались.

14
ответ дан 30 November 2019 в 08:58
поделиться

Десятичные дроби представляют собой десятичные значения с фиксированной точностью. Литеральное значение 0.50M имеет встроенную точность 2 десятичных разряда, и поэтому созданная десятичная переменная запоминает, что это значение 2 десятичных разряда. Поведение полностью задуманно.

Сравнение значений - это точная проверка числового равенства значений, поэтому здесь завершающие нули не влияют на результат.

2
ответ дан 30 November 2019 в 08:58
поделиться

Я думаю, что это было сделано для лучшего внутреннего представления числовых значений, полученных из баз данных. Механизмы базы данных имеют долгую историю хранения чисел в десятичном формате (избегая ошибок округления) с явной спецификацией количества цифр в значении.

Сравните, например, типы десятичных и числовых столбцов SQL Server .

4
ответ дан 30 November 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: