2

我知道如何获得浮点数的小数部分,但我不知道如何设置它。我有两个由函数返回的整数,一个保存整数,另一个保存小数部分。例如:

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 的数字,但我不知道。

4

3 回答 3

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您可以将初始值修改为 10 的i另一个幂。

于 2013-08-11T18:07:50.460 回答
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;
}

爱迪生: 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是一个好主意。

于 2013-08-11T18:11:41.800 回答
-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);
于 2013-08-11T18:56:54.143 回答