Bash和负浮点

Bash和负浮点,bash,Bash,我在Bash中有这样的代码: read a read b c=96.0 d=100.0 echo "scale=2;($b*$c - $a*$d)/$a" |bc 它会打印这个表达式的结果: (b*96-a*100)/a 但当结果介于-1和0之间时 它给出了这样的结果:-.99 对于较小的值,它会正确打印结果。 所以,我的问题是,如何在打印时强制程序输入0 0.123123(…) ??不仅 .123123(……) 使用printf: $ printf "%0.2f" "$(echo 'sca

我在Bash中有这样的代码:

read a
read b
c=96.0
d=100.0
echo "scale=2;($b*$c - $a*$d)/$a" |bc 
它会打印这个表达式的结果:

(b*96-a*100)/a

但当结果介于-1和0之间时 它给出了这样的结果:-.99

对于较小的值,它会正确打印结果。 所以,我的问题是,如何在打印时强制程序输入0

0.123123(…)

??不仅

.123123(……)

使用printf:

$ printf "%0.2f" "$(echo 'scale=2; 1.9/10.0' | bc)"
0.19

printf(也是)bash内置的

可能不适用于某些地区,请尝试
LANG=ru_ru.UTF-8 printf“%0.2f”。19
@eugene:适用于我(prints
0.19
);问题是十进制分隔符在RU语言环境中是逗号(就像在NL语言环境中一样)。但是,这对我很有用:export LC_ALL=nl_nl&&printf“%0.2f\n”0,18。这不起作用:导出LC_ALL=nl_nl&&printf“%0.2f\n”0.18-它生成错误消息“-bash:printf:0.18:无效数字”。@micans:这意味着eugene只是使用了错误的输入(
.19
而不是
,19
);可能,
bc
也不支持区域设置编号格式。我真的不能解决这个问题。当然,我的数字只是一个样本,我假设是en_US或C语言环境