support negative numbers