为什么浮动值比较失败?

问题描述:

在下面的例子中,出把显示的是假为什么浮动值比较失败?

float f = 0.1; 
    if (f == 0.1) 
     printf("True"); 
    else 
     printf("False"); 

但是,如果使用整数,而不是其浮动放出来为True 可能是什么原因?

+3

你可以只写文字为'0.1f'得到_more_ ** **的机会比较成功 –

+2

使用谷歌卢克。 –

+0

如果您使用整数,那么这两个值都是零。这不关你吗? – EJP

if (f == 0.1) 

这里,0.1double类型不float类型。表达式f == 0.1在右侧存在双精度值,它们存储在Double-precision floating-point format中,而浮点数存储在左侧的single precision floating point format中。双精度格式比单精度格式使用更多的位精度。

如果你想回答True,那么在0.1文字末尾指定f

float f = 0.1; 
    if (f == 0.1f) 
     printf("True"); 
    else 
     printf("False"); 

或者

if (f == (float)0.1)