Наконец, после 3-х месяцев перерыва, возвращаюсь к прохождению курса. На перерыв ушел в начале января. Решил тогда переключиться на изучение других дисциплин, как то HTML/CSS/Javascript. Попутно и технологии начал учить (сервлеты и JSP). На тот момент прошел 24 уровня и немного завяз на внутренних классах — не то, чтобы что-либо было не понятно, просто требовалась систематизация полученных знаний, т. к. слишком их много было получено за короткий период в режиме "галопом по Европам".
Так вот, сейчас я решил тщательно пройтись по первому тому Хорстмана для закрепления знаний Java Core и одновременно дорешать оставшиеся задачи с предыдущих уровней, после чего пойти дальше по уровням. Начал с бонусной задачи с 15-го уровня про факториал. Разделавшись с ней, решил глубже разобраться с классом BigDecimal. Популярных статей в инете особо не нашел, тогда залез в документацию и первый абзац в ней сразу же заставил пошевелить мозгами, как-то не все в нем было ясно. Решил докопаться до истины, а чтобы труды не пропали даром, оформил все в виде статьи и вот выкладываю на суд сообщества для обмена мнениями, да и может кому-то будет подспорьем.
Итак, я взял первый абзац и разбил его на предложения. В нем всего 5 предложений. Предложения номер 3 и 4 подчеркнул и переместил в конец абзаца (зачем так сделал — читайте дальше). И перевод соответственно сделал в таком измененном порядке.
Оригинал первого абзаца
- Immutable, arbitrary-precision signed decimal numbers.
- A BigDecimal consists of an arbitrary precision integer unscaled value and a 32-bit integer scale.
- If zero or positive, the scale is the number of digits to the right of the decimal point.
- If negative, the unscaled value of the number is multiplied by ten to the power of the negation of the scale.
- The value of the number represented by the BigDecimal is therefore (unscaledValue × 10-scale).
- Immutable, arbitrary-precision signed decimal numbers.
- A BigDecimal consists of an arbitrary precision integer unscaled value and a 32-bit integer scale.
- The value of the number represented by the BigDecimal is therefore (unscaledValue × 10-scale).
- If zero or positive, the scale is the number of digits to the right of the decimal point.
- If negative, the unscaled value of the number is multiplied by ten to the power of the negation of the scale.
- Это неизменяемые дробные1 десятичные числа со знаком2, произвольной длины34.
- Число BigDecimal задается двумя параметрами. Первый из них, т.н. unscaled value, является целым числом неограниченной длины. Зная только этот параметр, нельзя ничего сказать о фактической величине числа BigDecimal. Для этого нужно обязательно знать второй параметр — 32-битное целое число, которое называется масштабом (scale).
- Тогда величину числа BigDecimal можно вычислить по следующей формуле: unscaledValue × 10-scale
- Если число BigDecimal равно нулю или положительное, масштаб — это количество цифр после десятичной точки.
- Если число BigDecimal отрицательное, его unscaled value умножается на 10, возведенное в степень, равную scale со знаком минус.
Примечания к переводу 1. Дробные, потому что в "arbitrary-precision" заложено помимо прочего, что это числа точные, а точные числа должны быть с десятичной запятой, другими словами — дробными. 2. Т.е. могут быть как положительными, так и отрицательными. 3. Произвольной длины, потому что "arbitrary-precision" означает также "произвольное количество цифр". 4. Фактически, числа BigDecimal — это вещественные числа. Но устанавливая разные настройки, можно использовать их не только в научных расчетах, а и в финансовых.Так вот, подчеркнутые предложения были основным запутывающим для меня фактором — я бы их на самом деле просто убрал из текста, т. к. фактически они об одном и том же, а кроме того о том же, что говорится и в предложении номер 5. Т.е. в трех предложениях подряд говорится только о том, что unscaled value умножается на 10, возведенное в степень, равную scale со знаком минус. Это сбивает с толку при первом прочтении, т. к. читая предложение номер 3, понимаешь, что раз стоит if, значит тут будет что-то одно, а в следующем предложении — что-то другое. Ан нет — в обоих предложениях то же самое, только другими словами. Ну а третье (последнее в абзаце) предложение подряд о том же самом, наверное, как контрольный выстрел. Неясно, зачем текст составили таким запутанным образом, ведь формула unscaledValue × 10-scale из последнего предложения максимально ясно, однозначно и исчерпывающе дает определение большому числу.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Это я углубился туда, что раньше оставлял на потом. В учебниках про BigDecimal только упоминают что есть такой зверь, а тут задача попалась — ну и решил, что это «потом» наступило.
Сейчас потоки курю. Надо сказать, что не без пользы это занятие проходит — все как то по-новому открывается, столько нюансов осознаешь, которые при беглом чтении просто пропускаешь.