Ответ 1
Я видел десятичное значение вместо int/long в разных примерах. Я просто пытаюсь понять, почему
Вероятно, потому, что .NET decimal
и Oracle NUMBER
отображаются немного лучше, чем long
и NUMBER
, а также дает вам большую гибкость. Если вы на более позднем этапе добавите шкалу в столбце Oracle, вам не придется менять тип данных, если вы уже использовали decimal
.
decimal
, конечно, медленнее, чем int
и long
, так как последние два поддерживаются в аппаратном обеспечении. Тем не менее, вам нужно собрать некоторые серьезные данные, чтобы они имели какое-то значение. Я все еще думаю, что вы должны использовать long
, если это то, с чем вы имеете дело, а затем вы также должны позволить это определение столбца таблицы. NUMBER(18,0)
для long
и т.д.
Причина decimal
немного лучше отображает, что long
- 64 бита, а decimal
- это 128 бит.
.NET
Тип: десятичный
Приблизительный диапазон: ± 1,0 × 10 ^ -28 до ± 7,9 × 10 28 | Точность: 28-29 значащих цифрТип: длинный
Диапазон: -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
Точность: 18 (19 для улунга) значащие цифры
Oracle
NUMBER
defaults до 38 значащих цифр и шкалы 0 (целое число).
Тип: НОМЕР
Диапазон: + - 1 x 10 ^ -130 до 9.99... 9 x 10 ^ 125
Точность: 38 значащих цифр
Microsoft знает о проблеме и примечания
Этот тип данных является псевдонимом для NUMBER (38) и сконструирован так что OracleDataReader возвращает System.Decimal или OracleNumber вместо этого целочисленного значения. Использование .NET. Тип данных Framework может вызвать Переполнение.
Подумайте, вам действительно нужно BigInteger
, чтобы иметь возможность представлять одинаковое количество значащих цифр относительно того, что NUMBER
по умолчанию. Я никогда не видел, чтобы кто-то это делал, и я предполагаю, что это очень редкая потребность. Кроме того, BigInteger
все равно не сократил бы его, так как NUMBER
может иметь положительную и отрицательную бесконечность.