C语言如何做到四舍五入保留小数

您所在的位置:网站首页 c语言如何取整数 C语言如何做到四舍五入保留小数

C语言如何做到四舍五入保留小数

2022-12-15 18:52| 来源: 网络整理| 查看: 265

C语言中的格式化打印 :

例如: printf("%.2f",21.195); 输出是 21.20 四舍五入保留了 定义宏变量 #define 即符号常量 也能够四舍五入保留

而变量和常变量 并不四舍五入:

float a=21.195 ; const float b=21.195; printf("%.2f \n %.2f",a,b); 输出为 21.19 并没有四舍五入,而是直接截断了

在这里插入图片描述

变量和常变量 不四舍五入宏定义符号常量和实型常量 要四舍五入

今天做一个很简单的实验的时候,测试用例有一个一直有问题,便揣测应该是精度问题:

先看题目:

在这里插入图片描述 在这里插入图片描述

正常coding:

#include #define PI 3.14 int main(void) { /*********Begin*********/ float r, h; //输入半径和高 scanf("%f,%f", &r, &h); float c, s, v; c = 2 * r * PI; s = 4*PI*r*r; v = PI*r*r*h; int x = round(v); printf("C1=%.2f\n", c); printf("Sb=%.2f\n", s); printf("Vb=%.2f\n", v); /*********End**********/ return 0; }

然后发现测试有问题: 在这里插入图片描述

题目要求通过的是 最后一个 Vb体积为 21.20 而PI是确定的3.14

那问题出在哪了呢?

于是我便不保留2位输出 把 “%.2f” 换为 “%f” 在这里插入图片描述 所以可知 C语言中的 格式化打印 %.2f 保留两位 对于变量和常变量 是直接割舍的 不是四舍五入

测试了Java的格式化输出 Java中的是四舍五入的

在这里插入图片描述 可以看到 Java中不管是实型常量、常变量还是变量输出都是四舍五入的

那要怎么解决四舍五入保留小数呢?

方案一:

在计算体积的时候采用:添加这样一个方法来

v=(int)(v*100+0.5)/100.0; 先将体积扩大100倍,+0.5再把float类型强转为int类型即可达到四舍五入的效果,再除以100.0浮点数又自动转为浮点类型 #include #include #define PI 3.14 int main(void) { /*********Begin*********/ float r, h; scanf("%f,%f", &r, &h); float c, s, v; c = 2 * r * PI; s = 4*PI*r*r; v = PI*r*r*h; v=(int)(v*100+0.5)/100.0; int x = round(v); printf("C1=%.2f\n", c); printf("Sb=%.2f\n", s); printf("Vb=%.2f\n", v); /*********End**********/ return 0; } 方案二: #include 里提供了这么一个方法: round() 用例: float a=3.1415926; float b=round(a); 可得到 b=3

所以还是和方案一的思路一样 加一个:

v=round(v*10)/10.0;

即可,效果一样

       总结一下,C语言中的格式化打印输出,对于实型常量和符号常量是能够四舍五入保留的,但对于变量和常变量却不行,但自己处理。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3