shell保留两位小数,急求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell保留两位小数,急求相关的知识,希望对你有一定的参考价值。

我试过用bc,但是我发现 用 echo 配合bc之后,得到的是个 字符串类型了,不是数字类型的,我无法再进行 数学意义上的操作
比如:
a=$(echo "scale = 2;$a / 30000 "|bc)
echo $a
b=0.8
c=`expr $a + $b`
echo $c
就会发现 再次加算的时候 报错了,
我想知道保留两位小数,但是得到的数据依然可以继续用作数学计算的方法

用 awk 计算,printf 格式化输出。

a=450
a=$(awk -v n=$a 'printf("%.2f", n/30000)')
echo $a

追问

我需要的不是输出方式,而是得到这样的a之后 依然可以进行数学计算,
你这样是能打印出小数的效果,但是a自身就不能再进行数学计算了

就没有a里面是小数 依然能进行数学逻辑运算的么

追答

expr本身不支持小数运算,因此这跟a是什么输出方式没关系。

你可以在awk里都一起完成的嘛,awk里面是C语法环境,支持小数运算。用bc运算也可。

a=450
b=0.8
c=$(awk -v n=$a -v m=$b 'print printf("%.2f", n/30000)+m')
echo $c

你要中间数据的话,也可以都打印出来的。

追问

好深奥的样子,先拿来研究

参考技术A `expr $a / 3000`追问

不逗行么,这个明显不行,
a=153
a=`expr $a / 1000`
b=847
b=`expr $b / 1000`
c=`expr $a + $b`
echo $a,$b,$c

永远都是输出0

追答

你这么除当然是零了。
计算过程是按照数字来算的,但153/1000确实是零。
你试试这么做 `expr $a / 1000.0`
++++++
上面错了
c=$(echo "$a / 1000.0"|bc)

追问

我的目的是 得到的 小数 能用作 数学函数 使用,并不是 能打印出 小数的效果

如何将数值四舍五入后保留两位小数点

参考技术A 一个double或者float变量x四舍五入取整,可以(int)(x+0.5);
同理,如果要保留小数点后两位
(int)(100*x+0.5)
*
0.01
;

以上是关于shell保留两位小数,急求的主要内容,如果未能解决你的问题,请参考以下文章

linux 除法保留小数

计算钱时一定要保留两位小数吗

java编程如何保留两位小数

保留两位小数的函数都有哪些?

delphi怎么把一个数据保留两位小数

java保留两位小数