Search code examples
shellarithmetic-expressions

Unexpected arithmetic result with zero padded numbers


I have a problem in my script wherein I'm reading a file and each line has data which is a representation of an amount. The said field always has a length of 12 and it's always a whole number. So let's say I have an amount of 25,000, the data will look like this 000000025000.

Apparently, I have to get the total amount of these lines but the zero prefixes are disrupting the computation. If I add the above mentioned number to a zero value like this:

echo $(( 0 + 000000025000 ))

Instead of getting 25000, I get 10752 instead. I was thinking of looping through 000000025000 and when I finally get a non-zero value, I'm going to substring the number from that index onwards. However, I'm hoping that there must be a more elegant solution for this.


Solution

  • The number 000000025000 is an octal number as it starts with 0.

    If you use bash as your shell, you can use the prefix 10# to force the base number to decimal:

    echo $(( 10#000000025000 ))
    

    From the bash man pages:

    Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, numbers take the form [base#]n, where the optional base is a decimal number between 2 and 64 representing the arithmetic base, and n is a number in that base.