JavaRush /Java блог /Random UA /Трохи вглиб про числа BigDecimal
grishin
27 рівень
Харьков

Трохи вглиб про числа BigDecimal

Стаття з групи Random UA
Нарешті, після трьох місяців перерви, повертаюся до проходження курсу. На перерву пішов на початку січня. Вирішив тоді перейти на вивчення інших дисциплін, як HTML/CSS/Javascript. Принагідно і технології почав вивчати (сервлети і JSP). На той момент пройшов 24 рівні і трохи зав'яз на внутрішніх класах — не те, щоб щось було не зрозуміло, просто потрібна була систематизація отриманих знань, тому що занадто багато їх було отримано за короткий період у режимі "галопом по Європах". Так от, зараз я вирішив ретельно пройтися по першому тому Хорстмана для закріплення знань Java Core і одночасно дорішати завдання з попередніх рівнів, після чого піти далі по рівнях. Почав із бонусної задачі з 15-го рівня про факторіал. Розробившись із нею, вирішив глибше розібратися з класом BigDecimal. Популярних статей в інеті особливо не знайшов, тоді заліз у документацію і перший абзац у ній одразу ж змусив поворухнути мізками, якось не все було ясно. Вирішив докопатися до істини, а щоб праці не пропали даремно, оформив усе у вигляді статті і ось викладаю на суд спільноти для обміну думками, та й може комусь буде підмогою. Отже, я взяв перший абзац та розбив його на пропозиції. У ньому лише 5 пропозицій. Пропозиції номер 3 та 4 наголосив та перемістив у кінець абзацу (навіщо так зробив — читайте далі). І переклад відповідно зробив у такому зміненому порядку. Оригінал першого абзацу
  1. Immutable, arbitrary-precision signed decimal numbers.
  2. На велику загальну консистенцію arbitrary precision integer uncaled value and 32-bit integer scale.
  3. Якщо cero або позитивний, шрифт є числом піктограми до правого кутового пункту.
  4. Якщо negative, unscaled value of the number is multiplied by ten to the moc of the negation of the scale.
  5. Значення числа, спрямованої на BigDecimal is thefore ( unscaledValue × 10 -scale ).
Оригінал зі зміненим порядком речень
  1. Immutable, arbitrary-precision signed decimal numbers.
  2. На велику загальну консистенцію arbitrary precision integer uncaled value and 32-bit integer scale.
  3. Значення числа, спрямованої на BigDecimal is thefore ( unscaledValue × 10 -scale ).
  4. Якщо cero або позитивний, шрифт є числом піктограми до правого кутового пункту.
  5. Якщо negative, unscaled value of the number is multiplied by ten to the moc of the negation of the scale.
Розгорнутий переклад (кожен пункт перекладу відповідає пункту в оригіналі)
  1. Це незмінні дробові десяткові числа зі знаком 2 , довільної довжини 34 .
  2. Число BigDecimal визначається двома параметрами. Перший, т.зв. unscaled value є цілим числом необмеженої довжини. Знаючи лише цей параметр, не можна нічого сказати про фактичну величину числа BigDecimal. Для цього потрібно обов'язково знати другий параметр - 32-бітове ціле число, яке називається масштабом (scale).
  3. Тоді величину числа BigDecimal можна обчислити за такою формулою: unscaledValue × 10 -scale
  4. Якщо число BigDecimal дорівнює нулю чи позитивне, масштаб — кількість цифр після десяткової точки.
  5. Якщо число BigDecimal негативне, його unscaled value множиться на 10, зведене в ступінь, що дорівнює scale зі знаком мінус.
Примітки до перекладу
1. Дробні, тому що в "arbitrary-precision" закладено також,
   що це числа точні, а точні числа мають бути з десятковою комою,
   іншими словами - дробовими.
2. Тобто. можуть бути як позитивними, і негативними.
3. Довільна довжина, тому що "arbitrary-precision" означає також
   "довільна кількість цифр".
4. Фактично, числа BigDecimal – це речові числа. Але встановлюючи
   різні налаштування, можна використовувати їх не тільки в наукових розрахунках,
   а й у фінансових.
Так ось, підкреслені пропозиції були основним фактором, що заплутував для мене — я б їх насправді просто прибрав з тексту, тому що фактично вони про одне і те ж, а крім того про те ж, що йдеться і в пропозиції №5. Тобто. у трьох реченнях поспіль йдеться тільки про те, що unscaled value множиться на 10, зведене в ступінь, що дорівнює scale зі знаком мінус. Це збиває з пантелику при першому прочитанні, тому що читаючи пропозицію номер 3, розумієш, що раз стоїть if, значить тут буде щось одне, а в наступному реченні - щось інше. Та ні — в обох реченнях те саме, тільки іншими словами. Ну а третя (остання в абзаці) пропозиція поспіль про те саме, напевно, як контрольний постріл. Незрозуміло, навіщо текст склали таким заплутаним чином, адже формула unscaledValue × 10 -scale з останньої речення максимально ясно, однозначно та вичерпно дає визначення великому числу.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ