Неожиданный арифметический результат с добавленными нулями числами - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть проблема в моем скрипте, где я читаю файл, и в каждой строке есть данные, которые представляют собой сумму. Указанное поле всегда имеет длину 12 и всегда целое число. Допустим, у меня есть сумма в 25 000, данные будут выглядеть так: 000000025000.

По-видимому, я должен получить общее количество этих строк, но нулевые префиксы нарушают вычисления. Если я добавлю вышеупомянутое число к нулевому значению, как это:

echo $(( 0 + 000000025000 ))

Вместо 25000 вместо 10752. Я думал о циклическом просмотре 000000025000, и когда я, наконец, получу ненулевое значение, я собираюсь подставить число из этого индекса и далее. Однако я надеюсь, что для этого должно быть более элегантное решение.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Использование Perl

$ echo "000000025000" | perl -ne ' { printf("%d\n",scalar($_)) } '
25000
0 голосов
/ 08 ноября 2018

Число 000000025000 является восьмеричным числом, так как оно начинается с 0.

Если вы используете bash в качестве оболочки, вы можете использовать префикс 10#, чтобы базовое число стало десятичным:

echo $(( 10#000000025000 ))

Из справочных страниц bash:

Константы с начальным 0 интерпретируются как восьмеричные числа. Ведущий 0x или 0X обозначает шестнадцатеричное. В противном случае числа принимают форму [base #] n, где необязательное основание - это десятичное число от 2 до 64, представляющее арифметическое основание, а n - это число в этом основании.

...