Является ли Java BigDecimal ближайшим типом данных, соответствующим С# Decimal?
Согласно диаграмме здесь, эквивалентный тип данных в Java для С# Decimal
- BigDecimal
.
Это действительно так? Что за "Большая" преамбула? Кажется, что в Java нет "SmallDecimal" или "LittleDecimal" (не говоря уже о "MediumSizedDecimal").
Я должен сказать, однако, что диаграмма была самой ясной вещью, которую я нашел по предмету; другие ссылки здесь и здесь и здесь были для меня примерно такими же ясными, как река Миссисипи после ливневой бури.
Ответы
Ответ 1
Yep - соответствующий тип.
Поскольку вы используете Java после С#, не удивляйтесь, если найдете мало нюансов, подобных этому, или слишком расстроены, когда нет простого способа сделать что-то, что "легко" сделать С#. Первое, что приходит мне на ум, это int и int? - в Java вы просто используете int и Integer.
У С# была роскошь приходить после Java, поэтому многие (что я субъективно воспринимаю как) плохие решения были исправлены/упорядочены. Кроме того, это помогает тому, что С# был разработан Андресом Хейлсбергом (который, возможно, один из лучших разработчиков языка программирования в живом исполнении) и регулярно "обновляется" в отличие от Java (вы, вероятно, стали свидетелями того, что все вещи добавлены в С# с 2000 года - полный список)
Ответ 2
Это действительно так?
Они похожи, но не идентичны. Чтобы быть более конкретным: версия Java может представлять все значения, которые может иметь версия С#, но обратное неверно.
Что за "Большая" преамбула?
Java BigDecimal
может иметь сколь угодно большую точность и, следовательно, может быть сколь угодно большой. Если вы хотите сделать BigDecimal
с тысячей мест точности, вы идете прямо вперед.
Напротив, С# decimal
имеет фиксированный размер; он занимает 128 бит и дает вам 28 десятичных знаков точности.
Чтобы быть более точным: оба типа дают вам номера вида
+/- someInteger / 10 ^ someExponent
В С# someInteger
- это 96-битное целое число без знака, а someExponent
- это целое число от 0 до 28.
В Java someInteger
имеет произвольный размер, а someExponent
является 32-разрядным целым числом со знаком.