Обратите внимание на то, что при одинаковом количестве байтов, отводимых под величины типа float и int, диапазоны их допустимых значений сильно различаются из-за внутренней формы представления. То же самое относится к 1ong и double.
Тип decimal предназначен для денежных вычислений, в которых критичны ошибки округления. Как видно из табл. 2.5, тип float позволяет хранить одновременно всего 7 значащих десятичных цифр, тип double — 15-16. При вычислениях ошибки округления накапливаются, и при определенном сочетании значений это даже может привести к результату, в котором не будет ни одной верной значащей цифры! Величины типа decimal позволяют хранить 28-29 десятичных разрядов. Тип decimal не относится к вещественным типам, у них различное внутреннее представление. Величины денежного типа даже нельзя использовать в одном выражении с вещественными без явного преобразования типа. Использование величин финансового типа в одном выражении с целыми допускается. Любой встроенный тип С# соответствует стандартному классу библиотеки.NET, определенному в пространстве имен System. Везде, где используется имя встроенного типа, его можно заменить именем класса библиотеки. Это значит, что у встроенных типов данных С# есть методы и поля. С их помощью можно, например, получить минимальные и максимальные значения для целых, символьных, финансовых и вещественных чисел:
□ double.MaxValue (или System.Double.MaxValue) — максимальное число типа double;
□ uint.MinValue (или System.UInt32.MinValue) — минимальное число типа uint.
ПРИМЕЧАНИЕ
Интересно, что в вещественных классах есть элементы, представляющие положительную и отрицательную бесконечности, а также значение «не число» — это PositiveInfinity, NegativeInfinity и NaN соответственно. При выводе на экран, например, первого из них получится слово «бесконечность». Все доступные элементы класса можно посмотреть в окне редактора кода, введя символ точки сразу после имени типа.