2013-08-07 174 views
0

我做了以下数学计算 - 浮点数

float years = (1/31536000) * 883102.00; 

,我得到年= 0000000

而实际的答案是0.0.28

上什么可能会错误的任何建议?

+2

尝试在每个数字上添加'f'后缀 – user2485710

+2

@ user2485710'1f'无效C++。 –

+0

@PascalCuoq确定我的意思是'1.0f',为每个数字加上'.0f'。 – user2485710

回答

3

而应该做

float years = (1.0/31536000.0) * 883102.00; 

float years = (1.0/31536000) * 883102.00; 

可以正常工作。你的第一个数字被视为整数。

+0

窍门 - 感谢 – Rajeshwar

1

1是一个int。然后编译器会假设你对ints有兴趣,然后1/3153600变成0.只需在.1中加1,你的calc就可以工作了。

float years = (1.0/31536000) * 883102.00; 
1

第一项是int,因此四舍五入为0。试试这个:

float years = (1.00/31536000.00) * 883102.00 
+1

小数点后面为什么只有两个零?你不应该再添加几个以保证安全吗? –

+0

这里没有演员。第一项的类型为'int',第二项的类型为'int',因此它们的商具有类型'int'。该值是**截断**,不是四舍五入。 –

+0

@PeteBecker:“舍入”用于表示修改结果以适应目标格式(例如,IEEE 754-2008 4.3),并且可以使用各种舍入模式,例如舍入为零。 –

1

(31536000分之1)将产生出0是乘以任何数将为0 使分子或分母浮动ATLEAST一个(如1.0或31536000.0)

1

883102.0/31536000将做到这你想要什么。

1

因为整数司

(1/31536000) 

的小数位获得截断,结果为“零”。 你必须添加一个点:

(1.0/31536000.0) or (1./31536000.) 
3

只是不要

float years = 883102.00/31536000; 

这将节省计算。 既然你是潜水1的东西,然后乘。 或者只是将1设置为1.00