hur.cn - 华软网

 热门搜索

double类型变量赋值后有何区别?

  作者:未知    来源:网络    更新时间:2011/4/14
double b1 = 3.3 ;
double b2 = 3.3f ;

double a ;


a = 1 + b1 + b2 ;

---------------------------------------
以上程序运行时,用监视窗口查看b1 和 b2 
b1 = 3.29999999999999998 ;
b2 = 3.30000000000000004 ;

请问,为何b1不等于3.3 ?为何 b1和b2不一样的值? 一般如何将浮点数赋值给double类型的变量?

---华软 网友回答---
值是多少,跟你如何查看也有关。

---华软网友回复---
计算机技术是二进制的
先去理解浮点数如何用二进制表示

---华软网友回复---
那赋值语句如下那种形式正确呢?
double c;

c = 1.0 + 2.0/3.0 ;

c = 1 + 2/3.0 ;

c = 1.0 + 2.0/3 ;

c = 1.0f + 2.0f/3.0f ;
---华软网友回复---
引用 3 楼 newyc 的回复:
那赋值语句如下那种形式正确呢?
double c;

c = 1.0 + 2.0/3.0 ;

c = 1 + 2/3.0 ;

c = 1.0 + 2.0/3 ;

c = 1.0f + 2.0f/3.0f ;

都对,你自己试试就知道啦
---华软网友回复---
我晓得上述结果都对,但一般怎么样写比较规范呢?
因为我发现,如果写成如下这样的语句:

double c;

c = 1 + 2/3 ;

c的结果就变成了1 ,所以,我就想晓得浮点数如何写才规范,是需要写成1.0还是写成1.0f

---华软网友回复---
1.0就可以
---华软网友回复---
明白,谢谢!
---华软网友回复---
c = 1 + 2/3 ;
想让它变成1.666666666,应该这样写:

c= 1L+ 2L/3L
把常量定义为 long float,double类型的常量,这样才是按照浮点数计算出来结果,再赋值结果给c的。
语法有疑问就问google:
http://www.cplusplus.com/doc/tutorial/constants/

至于小数点后的数字,其实也是用 3/10这样的方式来计算出来的,只是浮点长度越长,表达出来的数字距离实际的精度越高。
---华软网友回复---
这两个都是3.3
2进制不可能正好的表示      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。