locked
Почему Decimal.ToString изменился при переходе от версии V1.0 к V1.1 и как это обойти? RRS feed

  • Общие обсуждения

  • В целом, число коренных различий между V1.0 и V1.1 весьма мало. Одним из наиболее заметных является изменение Decimal.ToString с целью сохранения концевых нулей и отображение их в методе ToString по умолчанию.

    [C#]
    Decimal value = 12.246000m;
    Console.WriteLine(value.ToString());

    Если в версии V1.0 печаталось 12,246, то в V1.1 то же значение печатается 12,246000. Это было сделано намеренно с целью следования стандарту ECMA CLI.

    Следует отметить, что это изменение влияет только на форматирование. Значения 12,246 и 12,246000 считаются одинаковыми при сравнении, или если над ними выполняются математические действия. Концевые нули, или масштаб числа после запятой являются периферийной информацией, сохраняемой на протяжении большинства операций, но не влияющей на равенство значения. В силу этого, они не должны вносить неполадки в код, не зависящий от конкретного формата строки.

    Чтобы обойти нововведения и вернуться к поведению V1.0, используйте формат G29: 

    [C#]
    Decimal value = 12.246000m;
    Console.WriteLine(value.ToString("G29"));

    Он будет печатать 12,246 в любой версии – 1.0 или 1.1. Формат G с числом означает форматирование заданного количества значащих цифр. Поскольку 29 – максимальное количество значащих цифр, которое может иметь число типа Decimal, это укоротит завершающие нули без округления.
    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 1:06 MSDN Forums consolidation (От:Форум по .NET Framework)
    18 февраля 2010 г. 11:05
    Модератор