#include<stdio.h> #include<math.h> #define size 5 float t(float n, int m); int main(void) { float array[size] = {2.33, 2.56, 2.65, 2.66, 2.30}; int i; printf("Old array:\n"); for (i = 0; i < size; i++) printf("a[%d]=%.3f\t", i, array[i]); printf("\nnew array:\n"); for (i = 0; i < size; i++) printf("a[%d]=%.2f\t", i, t(array[i], 2)); return 0; } float t(float n, int m)//m为保留到第几位,可随意更改 { float x1, x2; int i; for (x1 = n, i = 0; i < m - 1; i++) x1 *= 10.0;//将原数的小数点右移一位 x2 = floor(x1); x1 = floor((double)((x1 - x2) * 10));//获取第二位小数的数值,为什么这里仍要使用floor值得深思 if (x1 >= 5)//判断是否大于5 x2 += 1; for (i = 0; i < m - 1; i++) x2 /= 10.0; return x2; }
时间: 2024-04-02 17:36:01 浏览: 24
这段代码的功能是对一个浮点数数组中的每个元素保留小数点后两位,并输出新的浮点数数组。具体实现步骤如下:
1. 定义一个大小为5的浮点数数组array,赋初值为{2.33, 2.56, 2.65, 2.66, 2.30}。
2. 定义一个名为t的函数,参数为一个浮点数n和一个整数m,返回值为一个保留小数点后m位的浮点数。
3. 在主函数中,先输出原数组的每个元素,并在下一行输出新数组的每个元素,使用t函数对原数组的每个元素进行保留小数点操作,然后输出到新数组中。
需要注意的是,t函数的具体实现如下:
1. 将原数的小数点右移一位,乘以10,得到x1。
2. 取x1的整数部分x2,表示原数去掉小数点后的整数部分。
3. 取x1的小数部分,再乘以10,得到第二位小数的数值。
4. 如果第二位小数的数值大于等于5,将x2加1。
5. 将x2除以10的m-1次方,得到保留小数点后m位的浮点数。
需要注意的是,第三步中为什么要使用floor函数取整。这是因为在C语言中,浮点数的运算可能存在误差,例如2.65在计算机中可能会存储为2.6499999999999999,因此直接将其转换为整数可能会得到错误的结果,而使用floor函数可以将其正确地转换为整数。