Является ли 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-разрядным целым числом со знаком.