C语言学习(十)C语言中的小数

小数的表示方式

小数分为整数部分和小数部分,他们之间用点号.分隔,如0.0、7.5、4.098、0.27、-987.333等都是合法小数,这是最常见的小数形式,我们称为十进制形式。

此外,小时也可以采用指数形式,如3.2x103、0.0345x106、100.2323x10-6等。

C语言同时支持以上两种小数形式。

C语言中小数的指数形式为:

aEn 或 aen
其中a为尾数部分,是一个十进制的数字。n为指数部分,是一个十进制整数。e或者E是一个固定字符,用于分隔尾数和指数部分,整个表达式相当于ax10n

C语言中小数的类型

通常有两种类型,分别是float和double。float称为单精度浮点型,double称为双进度浮点型。

在C语言中,小数的长度是固定的,这点和整数完全不同。float始终占用4个字节,double始终占用8个字节。

小数的输出

小数也可以用printf函数输出,包括十进制和指数形式,他们对应的格式控制符分别为:

  • %f以十进制形式输出float类型
  • %lf以十进制形式输出double类型
  • %e以指数形式输出float类型,输出结果中e小写
  • %E以指数形式输出float类型,输出结果中E大写
  • %le以指数形式输出double类型,输出结果中e小写
  • %lE以指数形式输出double类型,输出结果中E大写

例:

#include <stdio.h>
#include <stdlib.h>
int main()
{float a = 0.302;float b = 128.101;double c = 123;float d = 112.64E3;double e = 0.7623e-2;float f = 1.23002398;printf("a=%e \nb=%f \nc=%lf \nd=%lE \ne=%lf \nf=%f\n", a, b, c, d, e, f);return 0;
}

运行结果:

a=3.020000e-01

b=128.100998

c=123.000000

d=1.126400E+05

e=0.007623

f=1.230024

代码说明:

  1. %f和%lf默认保留六位小数,不足六位以0补齐,超过6位按四舍五入截断。
  2. 将整数赋值给float变量时会变成小数
  3. 以指数形式输出小数时,输出结果位科学技术法(0<=尾数<10)
  4. b的输出结果看起来不像我们想的那样,他并未输出一个准确的结果,而是输出了一个近似值。这和小数在内存中的存储有关,我们下篇再分析。

另外,小数还有一种更加智能的输出方式,就是使用%g。%g会对比小数的十进制形式和指数形式,以最短的方式来输出小数,让输出结果更加简练。所谓最短,就是输出结果占用最少的字符。

%g的使用:

#include <stdio.h>
#include <stdlib.h>
int main()
{float a = 0.00001;float b = 30000000;float c = 12.84;float d = 1.229338455;printf("a=%g \nb=%g \nc=%g \nd=%g\n", a, b, c, d);return 0;
}

运行结果:

a=1e-05

b=3e+07

c=12.84

d=1.22934

代码分析:

  • a 的十进制形式是 0.00001,占用七个字符的位置,a 的指数形式是 1e-05,占用五个字符的位置,指数形式较短,所以以指数的形式输出。
  • b 的十进制形式是 30000000,占用八个字符的位置,b 的指数形式是 3e+07,占用五个字符的位置,指数形式较短,所以以指数的形式输出。
  • c 的十进制形式是 12.84,占用五个字符的位置,c 的指数形式是 1.284e+01,占用九个字符的位置,十进制形式较短,所以以十进制的形式输出。
  • d 的十进制形式是 1.22934,占用七个字符的位置,d 的指数形式是 1.22934e+00,占用十一个字符的位置,十进制形式较短,所以以十进制的形式输出。

需要注意的是:

  • %g默认最多保留六位有效数字(包括整数和小数);%f和%e默认保留六位小数,只是小数部分
  • %g不会在最后强加0来凑够有效数字位数,而%f和%e会在最后强加0来凑够小数部分位数

数字的后缀

在C语言中,一个数字是有默认类型的。对于整数,默认是int类型,对于小数,默认是double类型。

例:

long a = 100;
int b = 294;float x = 52.55;
double y = 18.6;

100个294这两个数字默认是int类型的,将100赋值给a,必须从int转换为long类型,而将294赋值给b就不用转换了。

52.55和18.6这两个数字默认都是double类型的,将52.55赋值给x,必须先从double类型转换为float类型,而将18.6赋值给y就不用转换了。

如果不想让数字使用默认的类型,就可以给数字加上后缀,手动指明类型:

  • 在整数后面紧跟l或者L(不区分大小写)表明该数字是long类型
  • 在小数后面紧跟f或者F(不区分大小写)表明该数字是float类型

例:

long a = 100l;
int b = 294;
short c = 32L;float x = 52.55f;
double y = 18.6F;
float z = 0.02;

虽然数字的类型变了,但是不意味着该数字智能赋值给指定的数据类型,他仍然可以赋值给其他类型,只要进行一下转换就可以了。

小数和整数相互赋值

在C语言中,整数和小数之间是可以相互赋值的:

  • 将一个整数赋值给小数类型,在小数点后面加0就可以,加几个都无所谓
  • 将一个小数赋值给整数类型,就得把小数部分丢掉(直接舍弃,而不是四舍五入),智能取整数部分,这会改变数字本来的值。

例:

#include <stdio.h>
int main(){float f = 251;int w = 19.427;int x = 92.78;int y = 0.52;int z = -87.27;printf("f = %f, w = %d, x = %d, y = %d, z = %d\n", f, w, x, y, z);return 0;
}

运行结果:

f = 251.000000, w = 19, x = 92, y = 0, z = -87

如果需要更加深入的从底层了解小数,或者你想知道小数在内存中是如何存在的,请参考小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么?

C语言学习(十)C语言中的小数相关推荐

  1. Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)

    Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名) 目录

  2. python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略

    python语言学习:python语言学习中的定义类.定义函数.封装api等详细攻略 目录 python语言学习中的定义类 python语言学习中的定义函数 python语言学习中封装api pyth ...

  3. Python语言学习:python语言代码调试—异常处理之详细攻略

    Python语言学习:python语言代码调试-异常处理之详细攻略 目录 python语言代码调试-异常处理 异常捕捉可以使用 try/except 语句 相关文章 Python3 错误和异常 | 菜 ...

  4. Python语言学习:python语言的特点、入门、基础用法之详细攻略

    Python语言学习:python语言的特点.入门.基础用法之详细攻略 相关内容 Python 基础教程 目录 python语言的特点 python语言的入门 python语言的基础用法 python ...

  5. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  6. C语言学习笔记---001C语言的介绍,编译过程原理,工具等

    C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...

  7. Python语言学习:Python语言学习之硬件交互应用(arduino、树莓派等)相关的简介、案例应用之详细攻略

    Python语言学习:Python语言学习之硬件交互应用(arduino.树莓派等)相关的简介.案例应用之详细攻略 目录 Python与硬件交互应用 1.适合运行python的嵌入式硬件系统 1.1. ...

  8. Python语言学习:Python语言学习之正则表达式常用函数之re.search方法【输出仅一个匹配结果(内容+位置)】、re.findall方法【输出所有匹配结果(内容)】案例集合之详细攻略

    Python语言学习:Python语言学习之正则表达式常用函数之re.search方法[输出仅一个匹配结果(内容+位置)].re.findall方法[输出所有匹配结果(内容)]案例集合之详细攻略 导读 ...

  9. C语言学习历程——C语言发展史以及--Hello World 程序

    C语言之父 丹尼斯·麦卡利斯泰尔·里奇(英语:Dennis MacAlistair Ritchie,1941年9月9日-2011年10月12日),美国计算机科学家,他是C语言的创造者.Unix操作系统 ...

  10. net语言学习教程 net语言从入门到精通视频教程

    net语言学习教程_0基础学net语言也可以,空闲时间学习,不耽误上班.2019年net语言新课程已经上线,多种课程任您选,随到随学,互动性强,效果好! NET语言学习介绍 NET学习课程说明 NET ...

最新文章

  1. 关于数据库group by需要注意
  2. Linux python impala/sasl/thrift-sasl command not found
  3. 制作ubuntu16.04的docker镜像
  4. JAVA数组扁平化整合_数组扁平化的几种处理放法
  5. activemq主从配置_使用ActiveMQ –具有故障转移协议的“主/从”配置
  6. C# 多线程编程 ThreadStart ParameterizedThreadStart
  7. Linux操作系统——类UNIX系统
  8. AIX系统常用命令总结
  9. php打开文件fopen函数
  10. PID控制电机输出作为电机PWM占空比输入的理解
  11. linux下ps ef命令详解,linux中ps -ef命令
  12. 设计师的色彩理论,你知道不同色彩的秘密吗?
  13. mod函数在vb中怎么用?
  14. python appium连接安卓真机测试
  15. Mingle 2.0 发布了
  16. php下载安装方法,phpstudy 2016免费版-php开发环境下载 v2016.11.03 附带安装教程 - 安下载...
  17. oracle求整数取余,oracle 取余 取整 字符串连接
  18. fMRI脑影像特征提取——静息态与任务态,ALFF/fALFF和ReHo(Dpabi,Rest1.8)
  19. Matlab Shannon编码
  20. Python入门到精通【精品】第一章 - Python概述

热门文章

  1. 网课查题微信公众号如何搭建步骤
  2. 南京艺术学院计算机作曲,南京艺术学院932主科(上机操作计算机作曲应用)考研复习经验...
  3. 新的一年,知足,上进,不负野心!
  4. 计算机蓝屏了 怎么维修,电脑蓝屏怎么解决
  5. 传热学相关的无量纲数的物理意义
  6. LM2596开关电源 多路开关电源 DC-DC降压电源 固定/可调输出 原理图和PCB
  7. 使用get-pip.py 安装python2 的pip
  8. Maximo安全控制相关表
  9. 为什么会“道可道非常道,名可名非常名”?
  10. narwal机器人_Narwal云鲸首创“基站+机器人”,智能扫拖干净省心