gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:24 25 4
gpt4 key购买 nike

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

int a = 12;
int b = 2; // This can never be 02, 03 etc
float c;

如何让 c 变成 12.2?我知道我可以添加类似 (float)b\10 的内容,但是如果 b >= than 10 怎么办?然后我必须除以 100,依此类推。有什么函数或我可以做的事情吗 setfractional(c, b)

谢谢

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

最佳答案

类似于:

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 float 学变幻莫测不会受到太大打击:-)

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

关于C++ 如何设置 float 的小数部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com