我知道如何获得浮点数的小数部分,但我不知道如何设置它。我有一个函数返回的两个整数,一个包含整数,另一个包含小数部分。 例如:
int a = 12;
int b = 2; // This can never be 02, 03 etc
float c;
如何让c
成为12.2?我知道我可以添加类似(float)b \ 10
的内容但是如果b>> =超过10呢?然后我必须除以100,依此类推。是否有功能或其他我可以做的事情setfractional(c, b)
?
由于
编辑:我越想到这个问题,我越发现它是多么不合逻辑。如果b == 1那么它将是12.1但是如果b == 10它也将是12.1所以我不知道我将如何处理这个。我猜这个函数永远不会返回一个数字> = 10 for fractional但我不知道。
答案 0 :(得分:0)
最简单的方法是计算b
的数字,然后相应地划分:
int i = 10;
while(b > i) // rather slow, there are faster ways
i*= 10;
c = a + static_cast<float>(b)/i;
请注意,由于float
的性质,结果可能与您的预期不同。此外,如果您需要3.004
之类的内容,则可以将i
的初始值修改为另一个10的幂。
答案 1 :(得分:0)
类似的东西:
float IntFrac(int integer, int frac)
{
float integer2 = integer;
float frac2 = frac;
float log10 = log10f(frac2 + 1.0f);
float ceil = ceilf(log10);
float pow = powf(10.0f, -ceil);
float res = abs(integer);
res += frac2 * pow;
if (integer < 0)
{
res = -res;
}
return res;
}
Ideone:http://ideone.com/iwG8UO
就像说:log10(98 + 1)= log10(99)= 1.995,ceilf(1.995)= 2,powf(10,-2)= 0.01,99 * 0.01 = 0.99,然后12 + 0.99 = 12.99然后我们检查标志。
让我们希望IEEE 754浮动数学的变幻莫测不会太难: - )
我要补充一点,使用double
代替float
可能会更好。除了3D图形之外,现在使用float
的字段很少是个好主意。
答案 2 :(得分:-1)
请在包含math.h和stdlib.h文件之后尝试以下代码:
int a=12;
int b=22;
int d=b;
int i=0;
float c;
while(d>0)
{
d/=10;
i++;
}
c=a+(float)b/pow(10,i);