首页 > 其他分享 >C语言中四舍五入问题总结

C语言中四舍五入问题总结

时间:2024-05-01 21:33:05浏览次数:13  
标签:总结 四舍五入 1.6 转换 int 类型转换 C语言 3.0 printf

C语言中四舍五入问题的总结

在C语言中大部分情况下都是不需要四舍五入的。

除了一种情况:在使用输出函数 printf()限制浮点型输出的小数位个数

eg:

printf("%0.2f",1.567);//输出的结果是1.57

其他情况下都不需要四舍五入,比如

  • 自动转换

在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。

转换的规则:转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。

eg:

​ ① int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。

​ ② 所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。

​ ③ char 和 short 参与运算时,必须先转换成 int 类型。

  • 强制转换

自动类型转换是编译器默默地、隐式地进行的一种类型转换,不需要在代码中体现出来;强制类型转换是程序员明确提出的、需要通过特定格式的代码来指明的一种类型转换。换句话说,自动类型转换不需要程序员干预,强制类型转换必须有程序员干预。

强制转换格式: (需要转换的数据类型) 变量

总结:无论是自动类型转换还是强制类型转换,都只是为了本次运算而进行的*临时性转换*,转换的结果也会保存到临时的内存空间(栈空间),不会改变数据本来的类型或者值。

debug程序如下:

#include<stdio.h>

int main(int argc, char const *argv[])
{
    int a=((double)(3/2)+0.5+(int)1.987);
    //(double)(3/2)先计算3/2,再强转,(double)(3/2)=1.0,(int)1.987=1
    int b=1.9+2.3;
    //先计算 1.9+2.3(其中自动转化成double类型),因为b是int类型,所以b=4
    printf("a=%d\n",a);
    printf("b=%d\n",b); 
    printf("(int)1.6: %d\n",(int)1.6);
    printf("1.6: %#x\n",1.6);
    printf("3.0+2: %f\n",3.0+2);
    printf("3.0+2: %d\n",3.0+2);
    return 0;
}

运行结果 :

PS E:\桌面资料\jing117> cd "e:\桌面资料\jing117" ; if ($?) { gcc debug.c -o debug } ; if ($?) { .\debug }
a=2
b=4
(int)1.6: 1
1.6: 0x9999999a
3.0+2: 5.000000
3.0+2: 0


需要注意的是,

  1. 在运行代码 printf("1.6: %#x\n",1.6); 时,得到的结果并不是1 ,而是0x9999999a,说明格式 printf("1.6: %#x\n",1.6); 不能正确引用输出。

  2. 在运行代码 printf("3.0+2: %d\n",3.0+2); 时,得到的结果并不是5 ,而是0。这是为什么呢?

标签:总结,四舍五入,1.6,转换,int,类型转换,C语言,3.0,printf
From: https://www.cnblogs.com/JinBool/p/18169668

相关文章

  • 海亮杯总结
    写在前面:100+100+30+0+20+20=270,rnk42,超级菜你说的对,但是《第三届“海亮杯”》是由海亮教育集团自主研发的一款全新开放世界冒险游戏。游戏发生在一个被称作「浙江省诸暨海亮高级中学」的幻想世界,在这里,被神选中的人将被授予「正方形巧克力」,导引「数位和」之力。你将扮演一位名......
  • C语言程序设计——字符串典型题练习
    1、计算一个字符串中最大的重复子串的字符的数量/********************************************************************* name : CalSubStrMaxCnt* function:计算一个字符串中最大的重复子串的字符的数量* argument:* @str:需要查找的字符串的地址* * ret......
  • C语言实现文件加密
    原理加密文本,或加密二进制文件,可以选择的一个最小加密单元是单个字符(或者说,一个byte)。将每个byte和31做异或运算,得到加密结果。再做一次异或则得以恢复原始数据。加密文本-控制台程序#include<stdio.h>#include<stdlib.h>voidencrypt(char*message){charc;......
  • Hive中的FileFormat、RowFormat和SerDe总结
    Hive如何读写数据?我们知道,hive表的数据是存储在hdfs文件系统中的。那么Hive是如何将hdfs上的数据文件,映射成一张张表呢,今天就来理清楚这个问题。官方文档中对于Hive读数据的流程如下: 精炼一下:Hive的执行引擎首先通过InputFormat读取一条一条的数据记录,接着调用Serde.destr......
  • nacos服务治理总结
    1、注解<!--nacos服务注册发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--OKhttp的依赖--><dependency>......
  • 微机结构总结
    我是计应232朱思嘉,今日发表微机结构总结。微机结构主要包括CPU,地址总线,存储器,I/O接口等CPU是微机的核心,负责执行程序中的指令,控制计算机的各种操作。CPU由数十亿个晶体管组成,这些晶体管以极小的尺寸和极高的速度执行各种逻辑和算术运算。CPU的性能直接决定了计算机的运行速度和......
  • 39.C语言数组学习的有关整理
    首先还是关于这两个东西sizeof()用于计算所占空间大小strlen()只用于求字符串长度/***sizeof计算所占空间大小\0也会计算*strlen只能用来求字符串长度直到找到字符串结束标志\0**/chararr1[]={'a','b','c'};//abcchararr2[]="abc";//abc\0......
  • 后记-书生浦语大模型实战营第二期参营总结
    书生浦语大模型实战营第二期参营总结动机在历史洪流面前,人轻浮得像一粒沙:今年的Java后端又要炸了。作为一条研究方向为图像处理、导师不放暑期实习的硕士牛马,自觉疲惫。既然对就业的准备暂时略感疲惫,科研又有导师天天push自然不会太主动,那就换换心情学点LLM相关的内容满足自己的......
  • 微服务学习总结4.30
    什么是微服务:分布式结构的一种,可涵盖多种语言不同版本的不同模块,提高了系统的可维护性,可伸缩性,可测试性为什么要用微服务:能够把不同模块分离开,提高效率减少压力。而且,微服务的使用可以方便多模块集成,可以实现一些跨版本模块的共同使用。比如如果我使用一个jdk8......
  • 【C语言】---- for循环函数
    在C语言中,for循环是一种常用的循环结构,用于重复执行一段代码多次。for循环提供了一种简洁而灵活的方式来实现循环,使程序员能够更有效地编写和管理代码。for循环的语法for循环的基本语法如下:for(初始化表达式;循环条件;更新表达式){//循环体}其中:初始化表达......