C ++如何设置浮点数的小数部分?

时间:2013-08-11 18:05:45

标签: c++ floating-point double

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

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但我不知道。

3 个答案:

答案 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);