BigDecimal оптимальный масштаб для кодирования - PullRequest
6 голосов
/ 21 октября 2011

Мне нужно компактно кодировать BigDecimal в ByteBuffer, чтобы заменить мою текущую (мусорную) схему кодирования (запись BigDecimal в кодировке UTF-8 String с префиксом байта, обозначающего Stringдлина).

Учитывая, что BigDecimal фактически является целочисленным значением (в математическом смысле) и связанной шкалой, я планирую записать шкалу в виде одного байта, за которым следует VLQ-кодированный целое числоЭто должно адекватно охватывать диапазон ожидаемых значений (т. Е. Максимальная шкала 127).

Мой вопрос: при обнаружении больших значений, таких как 10 000 000 000, явно оптимальным является кодирование этого значения: 1 со шкалой -10вместо того, чтобы кодировать целое число 10 000 000 000 со шкалой 0 (которая будет занимать больше байтов).Как я могу определить оптимальный масштаб для данного BigDecimal?... Другими словами, как я могу определить минимально возможную шкалу, которую я установил, присваивая BigDecimal без необходимости какого-либо округления?

Пожалуйста, не упоминайте термин "преждевременная оптимизация" в ваших ответах: -)

1 Ответ

7 голосов
/ 21 октября 2011

BigDecimal # stripTrailingZeros , кажется, делает это.

...