如何在shell中对浮点数进行计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在shell中对浮点数进行计算相关的知识,希望对你有一定的参考价值。
参考技术A 在shell中具有最基本的数学计算能力,如可以使用expr 、let 。但这些都只能处理整形数据。为了要计算小数,就需要通过bc命令扩展。下面演示了一个例子,判断输出的参数类型,然后计算出它的平方.#!/bin/sh
#filename: testbc
var=$1
dd=$(echo $var|bc 2>/dev/null )
if [ "$var" != "$dd" ] || [ "$var" == "" ]; then
echo "$var isn't number!"
elif echo $var | grep "/." > /dev/null 2>
then
#square=$(echo " $var * $var "|bc)
square=$(echo " $var * $var "|bc -l)
echo "$var is a float number,square is:$square"
else
square=$(echo "$var * $var" | bc)
echo "$var is a int number,square is:$square"
fi
执行脚本的结果如下:
$ testbc aaa
aaa isn't number!
$testbc 2
2 is a int number,square is:4
$testbc 1.5
1.5 is a float number,square is:2.25
如果要处理计算结果的精度,可以使用scale定义精度。可以这样处理:
$ echo "scale=3; 1.55 * 1.55 " | bc -l
2.402
如果不定义精度,那么1.55*1.55的值为:2.4025,因为我们定义了精度为3,所以就显示了小数点后3位.
$ echo "1.55 * 1.55" | bc -l
2.4025
C语言中如何对浮点数进行四舍五入?
据说%.3f是可以,但我自己测试时不行......
如果不行的话,请问一般怎么做???
C语言中对于浮点数输出的四舍五入是自动进行的。在浮点数的有效位数范围内,当要求保留小数点后n位时,系统会自动根据第n+1的值自动进行四舍五入操作。以下代码可以验证:
//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"
int main(void)
double pi=3.141592653589793;
printf("%.15f\\n",pi);
printf("%.3f\\n",pi);//保留3位小数,因第4位是5而进位
printf("%.5f\\n",pi);//保留5位小数,因第6位是2而舍弃
return 0;
输出是:
3.141592653589793
3.142
3.14159
参考技术A %.nf,其中n是字面常量,功能是输到小数点后面的第n位,第n + 1位“四舍五入”。下面是在VC++ 6.0环境下的测试结果。/*
0.234562
0.235
0.2346
0.23456
Press any key to continue
*/
#include <stdio.h>
int main()
float f = 0.2345623f;
printf("%f\n",f);
printf("%.3f\n",f);
printf("%.4f\n",f);
printf("%.5f\n",f);
return 0;本回答被提问者采纳 参考技术B %.3f 的意思是输入小数点之前的三位数,比如说: 12.1234 会输出:12.123,
0.1236会输出:0.123 。之后的数字会被直接无语!
你可以用下面的方法(不过这个方法只适合正数,负数就不行了)
float a = 1.1235; //保留到小数点后三位
float b =(int)((a * 1000) + 0.5) / 1000.0;
//output b = 1.124;追问
好奇怪,这次又可以了,上次是输出2个2.34。。。。
以上是关于如何在shell中对浮点数进行计算的主要内容,如果未能解决你的问题,请参考以下文章