c++c float 控制小数点能到小数点后多少位

为了账号安全,请及时绑定邮箱和手机
单精度浮点数float 默认小数点后几位
单精度浮点数float 默认小数点后几位,默认的是小数点后六位吗?
写下你的评论...
写下你的评论...
Copyright (C) 2018 imooc.com All Rights Reserved | 京ICP备 号-11C++中float,double到底保留几位有效数字_百度知道
C++中float,double到底保留几位有效数字
int ival = 3;
float fval = 1.f;
double dval = -45.;
double dval2 = -4.111;
cout && ival &&
cout && fval &&
cout && dval &&
cout && dval2 &&
输出的结果是:
我有更好的答案
float精度是2^23,能保证6位。double精度是2^52,能保证15位。double精度的确有那么高,但是默认打印位数没有那么多。先#include &iomanip&,然后在输出语句之前插入cout && setprecision(20);强行要求输出20位精度,就可以比较出float和double的精度差别了。
然后结果变成了:31.2397-45.003-4.1113额,怎么float和double都有17位了,后面那些拓展的怎么都不是我设置的大小啊
这就是超出精度部分的误差。
float前6位一定和你设置的一样,double前15位一定和你设置的一样。这就是精度的含义。
我试了float fval = 1.3f;显示的结果是1.2999999什么的啊。。。不是应该1.300000后面再误差吗。。
四舍五入到六位有效数字,结果与原数相同,证明没问题。
采纳率:57%
来自团队:
这个应该跟编译环境有关
为您推荐:
其他类似问题
float的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在C/C++中float是32位的,double是64位的,两者在内存中的存储方式和能够表示的精度均不同,目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。
无论是float还是double,在内存中的存储主要分成三部分,分别是:
(1)符号位(Sign):0代表正数,1代表负数
(2)指数位(Exponent):用于存储科学计数法中的指数部分,并且采用移位存储方式
(3)尾数位(Mantissa):用于存储尾数部分
对于两者在内存中的存储结构,如下图所示:
& & 数字float 9.125在十进制中用科学计算的方式表示为9.125*10^0 &,但是在计算机中,计算机只认识0和1,所以在计算机中是按照科学计算的二进制的方式表示的:
9的二进制表示为1001
0.125的二进制表示为0.001
所以9.125的表示成 &将其表示成二进制的科学计数方式为 1.^3&
在计算机中,任何一个数都可以表示成1.xxxxxx*2^n&这样的形式,
其中xxxxx就表示尾数部分,n表示指数部分
其中,因为最高位橙色的1这里,由于任何的一个数表示成这种形式时这里都是1,所以在存储时实际上并不保存这一位,这使得float的23bit的尾数可以表示24bit的精度,double中52bit的尾数可以表达53bit的精度。
& & 对于float型数据,可以精确到小数点后几位呢?当然,学过c的同学会说float能够精确到小数点后6位,但这是怎么的来的呢?下面做一点解释:
& & 十进制中的9,在二进制中的表示形式是1001,这里也就告诉我们,表示十进制中的一位数在二进制中需要4bit,所以我们现在float中具有24bit的精度,所以float在十进制中具有24/4=6,所以在十进制里,float能够精确到小数点后6位。同理,具有53bit精度的double类型能够精确到小数点后13位。
& & 对于float类型,他的指数部分有8bit,可以表示-127~128,但是这里采用了移位存储的方式(对这个概念不太清楚),在存储指数时数据的基数是127,而不是0,。例如上面的9.125,其二进制的指数部分为3,所以在存储时实际上存的是127+3=130。(130的二进制表示为)
最终根据上面图中float的存储结构可以知道,实际上9.125在计算机中:
上面的二进制数转换成十六进制后表示形式为:00
--& 41 10 00 00
实际上在X86计算机中,采用的是小端存储方式,即低地址存储低位数据,高地址存储高位数据。
所以数据应该是这样存储的:
对于double类型的存储方式实际上和float是类似的,只是存储的位数不同,在原理上都是一样的。
http://blog.csdn.net/qingtingchen1987/article/details/7719259
阅读(...) 评论()已解决问题
C++ double型变量为什么编译后只能显示5位小数?
#includeint main(){a=20.0/6;cout&
浏览次数:927
用手机阿里扫一扫
最满意答案
可以用ios::set...控制输出位数setprecision(2)&输出精度为2&,就是显示两位小数
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok关于Float数据类型,取小数点后几位精度的问题。
[问题点数:100分,结帖人Realot_11]
本版专家分:1
结帖率 100%
CSDN今日推荐
本版专家分:788
本版专家分:600
本版专家分:2678
本版专家分:1
结帖率 100%
本版专家分:1
结帖率 100%
本版专家分:43584
2002年12月 Delphi大版内专家分月排行榜第二
2003年1月 Delphi大版内专家分月排行榜第三
本版专家分:741
本版专家分:11492
本版专家分:11492
本版专家分:1830
本版专家分:5589
本版专家分:1
结帖率 100%
本版专家分:11817
匿名用户不能发表回复!|
CSDN今日推荐

我要回帖

更多关于 float小数点后几位 的文章

 

随机推荐