零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门
一.float和double简介
不管是 C
或者 C++
开发,在做 float
和 double
相互转换之前,我们首先需要知道 float
和 double
的区别,在文章《float
和 double
的区别》和 《数据类型/变量类型》 中我们有做详细的讲解:
1.float(单精度)
float
整数部分取值范围:能表达式万亿级别,已经够大了,实际开发完全够用;float
小数部分取值范围:最多只能精确到小数点后6
位;
2.double(双精度)
double
整数部分取值范围:比float
更大,脑补就行了…;double
小数部分取值范围:最多只能精确到小数点后15
位;
二.float和double转换
1.常规float和double转换
//double 转 float
double a = 3.145;
float b = a; //3.145
//float 转 double
float a = 3.145;
double b = a; //3.145
2.注意float和double精度丢失
float
小数点前后加起来有效数字只有 6
位,当给定的 float
有效数在 6
位以内转换为字符不会丢失精度,当有效位数大于 6
位就会存在精度丢失;
/************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C/C++ float 和 double 相互转换
//@Time:2021/08/14 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/************************************************************************/
#include "stdafx.h"
#include <stdio.h>
#include "windows.h"
#pragma warning( disable : 4996)
int _tmain(int argc, _TCHAR* argv[])
{
//精度没有丢失,小数点前后累计没有超过六位
float fValue = 8000.25;
printf("%f\n", fValue);
//精度没有丢失,小数点前后累计没有超过六位
fValue = 8.00025;
printf("%f\n", fValue);
//精度丢失,存在误差,小数点前后累计超过六位
fValue = 8000.251;
printf("%f\n", fValue);////8000.250977
//精度丢失,小数点前后累计超过六位,存在误差此时使用.8lf也无效
fValue = 8000.251;
printf("%.8lf\n", fValue);//8000.25097656
system("pause");
return 0;
}
/*
输出:
8000.250000
8.000250
8000.250977
8000.25097656
请按任意键继续. . .
*/
double
小数前后加起来的有效数字只有 16
位,当给定的 double
有效数在 16
位以内转换为字符串不会丢失精度,当有效位数大于 16
位存在精度丢失;
/************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C/C++ float 和 double 相互转换
//@Time:2021/08/14 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/************************************************************************/
#include "stdafx.h"
#include <stdio.h>
#include "windows.h"
#pragma warning( disable : 4996)
int _tmain(int argc, _TCHAR* argv[])
{
//精度丢失,存在误差,小数点前后累计超过16位
double dValue = 121.437565871234012;//121.437566
printf("%lf\n", dValue);
//精度没有丢失,小数点前后累计没有超过16位
dValue = 8000.256165;
printf("%lf\n", dValue);//8000.256165
system("pause");
return 0;
}
输出:
121.437566
8000.256165
请按任意键继续. . .
3.判断浮点数相等
用 ”==” 来比较两个
double
应该相等的类型,返回真值完全是不确定的。计算机对浮点数的进行计算的原理是只保证必要精度内正确即可。我们在判断浮点数相等时,推荐用范围来确定,若
x
在某一范围内,我们就认为相等,至于范围怎么定义,要看实际情况而已了,float
和double
各有不同;
比如要判断浮点数 float
变量 A
和 B
是否相等,示例代码如下:
float x = A – B;
const float EPSINON = 0.00001;
if ((x >= - EPSINON)&& (x <= EPSINON)
cout<<”A 与B相等<<endl;
else
cout<<”不相等”<<endl;
根据上面分析建议在系统开发过程中设计到字符转换建议采用 double
类型,精度设置为 %.8lf
即可,在比较浮点数,建议 EPSINON
= 0.00000001
三.猜你喜欢
- C语言 数组下标越界和内存溢出区别
- C语言 使用指针遍历数组
- C语言 指针和数组区别
- C语言 指针数组和数组指针区别
- C语言 野指针
- C语言 函数值传递和址传递
- C语言 函数不定长参数
- C语言 函数指针
- C语言 指针函数
- C语言 回调函数 callback
- C语言 #pragma once
- C语言 #include <> 与 #include “” 区别
- C语言 const 修饰函数参数
- C语言 const 和 define 区别
- C语言 #运算符
- C语言 ##运算符
- C语言 __VA_ARGS__
- C语言 ##__VA_ARGS__
- C语言 函数不定长参数 ##__VA_ARGS__经典案例
- C语言 va_start / va_end / va_arg 自定义 printf 函数
- C语言 main 函数
- C语言 main 函数参数 main(int argc, char *argv[])
- C语言 局部变量
- C语言 全局变量
- C语言 全局变量和局部变量区别
- C语言 static
- C语言 extern
- C/C++ Unicode 和多字节区别
- C/C++ wprintf 输出中文乱码
- C/C++ char 和 wchar_t 相互转换
ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
- 最新
- 最热
只看作者