Skip to content

Files

Latest commit

 

History

History
31 lines (18 loc) · 868 Bytes

SC2017.md

File metadata and controls

31 lines (18 loc) · 868 Bytes

Pattern: Possible loss of precision in Bash integer division

Issue: -

Description

If integer division is performed before multiplication, the intermediate result will be truncated causing a loss of precision.

In this case, if count=1 and total=2, then the problematic code results in percent=0, while the correct code gives percent=50.

Example of incorrect code:

percent=$((count/total*100))

Example of correct code:

percent=$((count*100/total))

Exceptions

If you want and expect truncation you can ignore this message.

ShellCheck doesn't warn when b and c are identical expressions, e.g. a/10*10, under the assumption that the intent is to rounded to the nearest 10 rather than the no-op of multiply by 1.

Further Reading