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

C++如何设置浮点的小数部分?,c++,floating-point,double,C++,Floating Point,Double,我知道如何得到浮点的小数部分,但我不知道如何设置它。我有两个由函数返回的整数,一个保存整数,另一个保存小数部分。 例如: int a = 12; int b = 2; // This can never be 02, 03 etc float c; 如何使c变为12.2?我知道我可以添加类似floatb\10的内容,但是如果b大于等于10呢?然后我必须除以100,以此类推。有没有一个函数或什么我可以做的 谢谢 编辑:我越想这个问题,就越意识到它是多么不合逻辑。如果b==1,那么它将是12.1,

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

int a = 12;
int b = 2; // This can never be 02, 03 etc
float c;
如何使c变为12.2?我知道我可以添加类似floatb\10的内容,但是如果b大于等于10呢?然后我必须除以100,以此类推。有没有一个函数或什么我可以做的

谢谢


编辑:我越想这个问题,就越意识到它是多么不合逻辑。如果b==1,那么它将是12.1,但是如果b==10,它也将是12.1,所以我不知道我将如何处理这个问题。我猜这个函数对于分数永远不会返回大于等于10的数字,但我不知道。

最简单的方法是计算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的初始值修改为另一个十的幂。

最简单的方法是计算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的初始值修改为另一个十的幂。

类似于:

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;
}
表意文字:

这就像说:log1098+1=log1099=1.995,ceilf1.995=2,powf10,-2=0.01,99*0.01=0.99,然后12+0.99=12.99,然后我们检查标志

让我们希望IEEE 754浮点运算的反复无常不会受到太大的打击:-

我要补充的是,使用double而不是float可能会更好。除了3d图形,现在很少有字段使用float,这是一个好主意。

类似于:

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;
}
表意文字:

这就像说:log1098+1=log1099=1.995,ceilf1.995=2,powf10,-2=0.01,99*0.01=0.99,然后12+0.99=12.99,然后我们检查标志

让我们希望IEEE 754浮点运算的反复无常不会受到太大的打击:-


我要补充的是,使用double而不是float可能会更好。除了3d图形,现在很少有字段使用float,这是个好主意。

请在包含include 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);

请在包含include 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);


嗯,什么?在这个方案中,您希望如何表示数字3.004?我想不出任何合理的理由想要这样做。你到底想完成什么?或12.0123或12.00123。我能看出b是十分之一还是百分之一百,而不仅仅是分数。把分数部分作为分子和分母,这不就是分数吗???我正在努力完成我在问题中所说的。但正如我在编辑中所说,我无法解释为什么小数部分作为整数返回。至少在典型情况下,这被实现为小数部分是某个分数的计数,例如千分之一。在这种情况下,您只需转换为浮点并除以指定的分母。嗯,什么?在这个方案中,您希望如何表示数字3.004?我想不出任何合理的理由想要这样做。你到底想完成什么?或12.0123或12.00123。我能看出b是十分之一还是百分之一百,而不仅仅是分数。把分数部分作为分子和分母,这不就是分数吗???我正在努力完成我在问题中所说的。但正如我在编辑中所说,我无法解释为什么小数部分作为整数返回。至少在典型情况下,这被实现为小数部分是某个分数的计数,例如千分之一。在这种情况下,您只需转换为浮点并除以指定的分母。我没有投反对票,但在您问为什么被投反对票之前,可能是因为以下原因:您的答案格式不正确,没有提供任何解释,尽管是Xanatos和我的答案的混合体,它鼓励在C++问题上包含C标题。需要说明我没有投票,但是在你问你为什么被否决之前,这些可能是原因:你的答案是格式化的,没有提供任何解释,尽管是Xanatos和我的答案的混合。它鼓励在C++问题上包含C头文件。explanation@user2672807更正。现在表意文字有各种各样的含义tests@EricPostpischil它们是局部变量,所以我can@EricPostpischil遗憾的是,我找不到C++的自动机,但是从4开始。所有具有外部链接的标准库标识符(如函数名)始终保留为具有外部链接的标识符。pow显然落在这里,但局部变量显然不落在这里。@user2672807更正。现在表意文字有各种各样的含义tests@EricPostpischil它们是局部变量,所以我
can@EricPostpischil遗憾的是,我找不到C++的自动机,但是从4开始。所有具有外部链接的标准库标识符(如函数名)始终保留为具有外部链接的标识符。pow显然落在这里,但局部变量显然不落在这里。