C/C++ float 和 double 相互转换

您所在的位置:网站首页 c语言float怎么定义 C/C++ float 和 double 相互转换

C/C++ float 和 double 相互转换

2023-03-30 12:58| 来源: 网络整理| 查看: 265

零基础 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 #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 #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


【本文地址】


今日新闻


推荐新闻


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