Всегда показывать конечные нули в bc

Как показать конечные нули в целом или как преобразовать его в число с плавающей запятой в bc? Я знаю про scale, но он работает только с поплавками:

$ echo "scale=3; 3/2" | bc
1.500
$ echo "scale=3; 1+1" | bc
2

Я хочу получить результат, похожий на 2.000. Я думаю, это не сложно сделать с помощью sed, но я новичок в этом.


person hant0508    schedule 22.05.2016    source источник
comment
вы можете передать вывод bc в printf: echo "scale=3; 1+1" | bc | xargs printf "%.3f\n". (xargs кажется необходимым, я не могу понять, как подключиться напрямую к printf).   -  person Lars Fischer    schedule 22.05.2016


Ответы (2)


Разделите на 1, чтобы преобразовать в число с дробной частью:

$ echo "scale=3; 1+1/1" | bc
2.000

после любого деления, если это значение окажется частью вывода, оно будет напечатано с указанным количеством цифр.

Это не «плавающие числа» в bc — это числа с «фиксированной запятой» — числа с фиксированным количеством цифр после запятой. Внутри это просто целые числа, деленные на фиксированную степень 10 (устанавливается командой scale)

person Chris Dodd    schedule 22.05.2016
comment
Это не работает, когда результат равен 0: $ echo "scale=3; 1-1/1" | bc - person hant0508; 22.05.2016

echo "scale=3; $1+$2" | bc | sed 's/^[0-9]*$/&\.000/g'

Он отлично работает для меня:

$ echo "scale=3; 3/2" | bc | sed 's/^[0-9]*$/&\.000/g'
1.500
$ echo "scale=3; 3+2" | bc | sed 's/^[0-9]*$/&\.000/g'
5.000
person hant0508    schedule 22.05.2016