VC ++ 2008 express [重复]上的浮点乘法

问题描述 投票:-1回答:1
为什么以下代码段

int i = 30; int p = 0.7f * i; printf("p is %d\n", p);

在vc ++ 2008 Express上给出20而不是21?我知道这是一个旧的编译器!    
c visual-studio-2008
1个回答
0
投票
数字0.7在编译器用于float的基于二进制的浮点格式中无法表示。将十进制数字“ 0.7”转换为float时,结果是最接近的可表示值。这个数字略低于0.7。

乘以30会得到一个略低于21的数字,并通过截断将其转换为int会产生20。

© www.soinside.com 2019 - 2024. All rights reserved.