.NET - Почему в C # нет числового типа данных с фиксированной запятой? - PullRequest
7 голосов
/ 21 февраля 2011

Кажется, что было бы тонна использования для типа данных с фиксированной точкой. Почему в .NET нет ни одного?

Примечание: я понимаю, что мы можем создавать наши собственные классы / структуры, чтобы соответствовать нашим целям и потребностям с фиксированной точкой. Это не мой вопрос. Я хочу знать, ПОЧЕМУ MS решила не включать числовой тип данных с фиксированной запятой.

Ответы [ 3 ]

7 голосов
/ 21 февраля 2011

Вы ищете малоизвестный System.Data.SqlTypes.SqlDecimal класс .

6 голосов
/ 21 февраля 2011

Decimal (с плавающей запятой 10) было сочтено достаточно хорошим.

5 голосов
/ 21 февраля 2011

Одна проблема, вероятно, связана с вопросом: где вы исправляете точку?Тип в .NET не может быть параметризован другими аргументами, кроме типов, поэтому FixedNum<18,6> просто невозможен.И вы не хотите создавать FixedNum1x0, FixedNum1x1, FixedNum2x0, FixedNum2x1, FixedNum2x2 и т. Д.

Вы должны иметь возможность параметризовать тип вашей фиксированной точки, а не только значенияпотому что это может привести к почти невозможному отслеживанию ошибок:

FixedNum f() { return new FixedNum(1, decimals: 2); }

FixedNum x = new FixedNum(1, decimals: 0);
...
x = f(); // precision of x increased.

Таким образом, вам нужно проверять и ограничивать значения фиксированной точки каждый раз, когда вы получаете их от чего-то, что не является локальной переменной.Как и в случае с decimal, когда требуется фиксированный масштаб или точность.

Другими словами, учитывая ограничения системы типов .NET, decimal уже является встроенной реализацией класса FixedNum, описанного выше..

...