C语言double和float 实例分析

小数也称实数或浮点数。例如,0.0、75.0、4.023、0.27、-937.198 都是合法的小数。这是常见的小数的表现形式,称为十进制形式。

除了十进制形式,也可以采用指数形式,例如 7.25×102、0.0368×105、100.22×10-2 等。任何小数都可以用指数形式来表示。

C语言中的小数也有这两种表示形式。在书写时,十进制形式和数学中的一样,指数形式有所差异。

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

aEn 或 aen

a 为尾数部分,是一个十进制数,n 为指数部分,是一个十进制整数,E或e是固定的字符,其值为 a×10n。例如:

2.1E5 = 2.1×105,其中2.1是尾数,5是指数。

3.7E-2 = 3.7×10-2,其中3.7是尾数,-2 是指数。

0.5E7 = 0.5×107,其中0.5是尾数,7是指数。

C语言中小数的数据类型为 float 或 double:float 称为单精度浮点数,double 称为双精度浮点数。不像整数,小数的长度始终是固定的,float 占用4个字节,double 占用8个字节。

10 是固定的,不需要在内存中体现出来。正负号、指数(n)、尾数(a) 是变化的,需要占用内存空间来表示。

float、double 在内存中的形式如下所示:

输出 float 使用 %f 控制符,输出 double 使用 %lf 控制符,如下所示:

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

运行结果:

a=128.100998

b=0.302000

c=1.230024

d=123.000000

e=78.429000

对代码的说明:

1) %f 默认保留六位小数,不足六位以 0 补齐,超过六位按四舍五入截断。

2) 将整数赋值给 float 变量时会转换为小数。

3) 小数默认为 double 类型,加上后缀f才是float类型。

4) 由于内存有限,小数的精度受限,所以输出 a 时只能获得一个近似数。

以上就是对C语言中double 和float 进行的详细分析、比较,希望能帮助学习这块内容的同学。

(0)

相关推荐

  • short int、long、float、double使用问题说明

    short int 短整型 2个字节 值范围 -32768~32767 long 长整型 4个字节 值范围 -2147483648-2147483647 float 单精度 4个字节 值范围 -3.4*10(-38)-3.4*10(38) double 双精度 8个字节 值范围 -1.7*10(-308)-1.7*10(308) 在Access数据导出到DBF时遇到此问题,DBF中的字段宽度不是指Access中的字段所占字节数,而是字符数. 在DBF中,整数与浮点数都是以字符形式存储的.例如:-

  • Java中的双重检查(Double-Check)详解

    在 Effecitve Java 一书的第 48 条中提到了双重检查模式,并指出这种模式在 Java 中通常并不适用.该模式的结构如下所示: public Resource getResource() { if (resource == null) { synchronized(this){ if (resource==null) { resource = new Resource(); } } } return resource; } 该模式是对下面的代码改进: public synchron

  • java使double保留两位小数的多方法 java保留两位小数

    复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat    df   = new DecimalFormat("######0.00"); double d1 = 3.23456  double d2 = 0.0;double d3 = 2.0;df.format(d1); df.format(d2); df.format(d3); 3个结果分别为: 复制代码 代码如下: 3.230.00 2.00 java保留两位小数问题:

  • C#生成设置范围内的Double类型随机数的方法

    本文实例展示了C#实现生成设置范围内的Double类型随机数的方法,对于C#的学习来说有不错的借鉴价值,分享给大家供大家参考. 关键代码如下: /// <summary> /// 生成设置范围内的Double的随机数 /// eg:_random.NextDouble(1.5, 2.5) /// </summary> /// <param name="random">Random</param> /// <param name=&q

  • C# double和decimal数据类型以截断的方式保留指定的小数位数

    项目中要用到以截断的方式取小数点后两位,故写了以下方法: 复制代码 代码如下: /// <summary> /// 将小数值按指定的小数位数截断 /// </summary> /// <param name="d">要截断的小数</param> /// <param name="s">小数位数,s大于等于0,小于等于28</param> /// <returns></retur

  • C# DoubleClick与MouseDoubleClick区别,双击事件引发顺序

    DoubleClick 事件 在双击控件时发生.处理时不包含任何事件数据. MouseDoubleClick 事件 当用鼠标双击控件时发生.通过事件所包含的MouseEventArgs 对象,可以获取鼠标数据. 从逻辑上来说,由于比MouseDoubleClick 描述更抽象,DoubleClick 事件是控件的更高级别的事件, 事件引发的顺序: MouseDown 事件. Click 事件. MouseClick 事件. MouseUp 事件. MouseDown 事件. DoubleClic

  • 基于C++浮点数(float、double)类型数据比较与转换的详解

    浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数.具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法.所以浮点数在运算过程中通常伴随着因为无法精确表示而进行的近似或舍入.但是这种设计的好处是可以在固定的长度上存储更大范围的数.1.将字符串转换为float.double过程存在精度损失,只是float.double各自损失的精度不相同而已std::string str="8.2&

  • java对double数组排序示例分享

    复制代码 代码如下: package airthmatic;public class demo10 { public static void main(String[] args) { double n[]={9,1.2,5,3.2,1.1};  orderNum(n);  } /**  * double 和 int 数字排序  * @param n  */ public static void orderNum(double []n){ for(int i=0;i<n.length-1;i++

  • C语言double和float 实例分析

    小数也称实数或浮点数.例如,0.0.75.0.4.023.0.27.-937.198 都是合法的小数.这是常见的小数的表现形式,称为十进制形式. 除了十进制形式,也可以采用指数形式,例如 7.25×102.0.0368×105.100.22×10-2 等.任何小数都可以用指数形式来表示. C语言中的小数也有这两种表示形式.在书写时,十进制形式和数学中的一样,指数形式有所差异. 在C语言中小数的指数形式为: aEn 或 aen a 为尾数部分,是一个十进制数,n 为指数部分,是一个十进制整数,E或

  • R语言绘制折线图实例分析

    折线图是通过在它们之间绘制线段来连接一系列点的图. 这些点在它们的坐标(通常是x坐标)值之一中排序. 折线图通常用于识别数据中的趋势. R语言中的plot()函数用于创建折线图. 语法 在R语言中创建折线图的基本语法是 - plot(v,type,col,xlab,ylab) 以下是所使用的参数的描述 - v是包含数值的向量. 类型采用值"p"仅绘制点,"l"仅绘制线和"o"绘制点和线. xlab是x轴的标签. ylab是y轴的标签. main是

  • R语言操作XML文件实例分析

    XML是一种文件格式,它使用标准ASCII文本共享万维网,内部网和其他地方的文件格式和数据. 它代表可扩展标记语言(XML). 类似于HTML它包含标记标签. 但是与HTML中的标记标记描述页面的结构不同,在xml中,标记标记描述了包含在文件中的数据的含义. 您可以使用"XML"包读取R语言中的xml文件. 此软件包可以使用以下命令安装. install.packages("XML") 输入数据 通过将以下数据复制到文本编辑器(如记事本)中来创建XMl文件. 使用.

  • go语言简单网络程序实例分析

    本文实例分析了go语言简单网络程序.分享给大家供大家参考.具体分析如下: 服务端代码如下: 复制代码 代码如下: package main import (     "net"     "os" ) func serve(s net.Conn) {     var buf [1024]byte     for {         n, err := s.Read(&buf)         if err != nil || n == 0 {         

  • Go语言共享内存读写实例分析

    本文实例分析了Go语言共享内存读写的方法.分享给大家供大家参考.具体分析如下: 前面分析了Go语言指针运算和内嵌C代码的方法,做了一个Go语言共享内存读写的实验. 先大概说下什么是共享内存.我们知道不同进程见的内存是互相独立的,没办法直接互相操作对方内的数据,而共享内存则是靠操作系统提供的内存映射机制,让不同进程的一块地址空间映射到同一个虚拟内存区域上,使不同的进程可以操作到一块共用的内存块.共享内存是效率最高的进程间通讯机制,因为数据不需要在内核和程序之间复制. 共享内存用到的是系统提供的mm

  • C语言的递归思想实例分析

    本文实例分析C语言的递归思想,分享给大家供大家参考之用.具体方法如下: 通俗点来说,递归就是自己调用自己. 递归的难点一是理解递归的执行调用过程,二是设置一个合理的递归结束条件. 下面来看一段摘自书中的简单程序: #include <STDIO.H> long fact(int n); long rfact(int n); int main(void) { int num; printf("This program calculates factorials.\n"); p

  • Go语言map字典用法实例分析

    本文实例讲述了Go语言map字典用法.分享给大家供大家参考.具体分析如下: 这段代码生成了青岛.济南.烟台三个城市拼音和汉字的对照字典,根据拼音可以输出汉字 复制代码 代码如下: package main import "fmt" func main(){  var pc map[string] string  pc = make(map[string] string)  pc["qingdao"] = "青岛"  pc["jinan&

  • go语言睡眠排序算法实例分析

    本文实例讲述了go语言睡眠排序算法.分享给大家供大家参考.具体分析如下: 睡眠排序算法是一个天才程序员发明的,想法很简单,就是针对数组里的不同的数开多个线程,每个线程根据数的大小睡眠,自然睡的时间越长的,数越大,哈哈,搞笑吧,这种算法看起来很荒唐,但实际上很天才,它可以充分利用多核cpu进行计算. 复制代码 代码如下: package main import (     "fmt"     "time" ) func main() {     tab := []in

  • Go语言中错误处理实例分析

    本文实例讲述了Go语言中错误处理的方法.分享给大家供大家参考.具体分析如下: 错误是可以用字符串描述自己的任何东西. 主要思路是由预定义的内建接口类型 error,和其返回返回字符串窜的方法 Error 构成. type error interface { Error() string } 当用 fmt 包的多种不同的打印函数输出一个 error 时,会自动的调用该方法. 复制代码 代码如下: package main import (     "fmt"     "time

  • Go语言排序与接口实例分析

    本文实例讲述了Go语言排序与接口用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: import "fmt" type Sorter interface {   Len() int   Less(i, j int) bool   Swap(i, j int) } type Xi []int type Xs []string func (p Xi) Len() int { return len(p) } func (p Xi) Less(i int, j int) bool {

随机推荐