C++如何设置浮点的小数部分
C++ How do I set the fractional part of a float?
我知道如何获取浮点的小数部分,但不知道如何设置。我有两个函数返回的整数,一个保存整数,另一个保存小数部分。例如:
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)
?
感谢
edit:我越想这个问题,就越意识到它是多么不合逻辑。如果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浮动数学的变幻莫测不会受到太大的打击:-)
我要补充的是,使用double
而不是float
可能会更好。除了三维图形,很少有领域使用float
是当今的一个好主意。
最简单的方法是计算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的另一个幂。
请在包含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);
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- C++将浮点指针值舍入为小数位数
- 从给定的 I 和 D 序列中形成最小数
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- c++只关心2位小数,没有设置精度
- 有没有一种方法可以在不设置精度的情况下设置小数位数
- 是否可以保证输入<Type>实数时复杂对象的虚部设置为零?
- OpenCV 为什么将垫子设置为小于 1 的小数不会导致垫中的所有值都变为 0?
- 如何设置数字格式以显示C 中的所有小数位数
- 使用cstring.format()中区域设置的小数分离器
- C++如何设置浮点的小数部分
- 如何在CLion中设置端部支架的位置
- 使用 6 位设置浮点数的小数部分
- 用C++设置带有小数秒的日期和时间格式
- 如何在c++中存储纬度的小数部分为4 unsigned char
- c++ setprecision(设置1-10的小数数)