【发布时间】:2012-03-23 17:42:53
【问题描述】:
我需要计算浮点值的小数位数,例如
1234.567 -> 3
2.1233 -> 4
4.2432 -> 4
我最初的想法是:
number = 1234.567;
...
while (number - (int)number > 0.0)
{
// Count decimal places
...
number *= 10;
}
但是,这会导致 while 条件下的浮点精度出现问题。唯一安全的解决方法是将浮点数转换为字符串,然后进行基于字符串的小数位数计数。
问题是:我不能使用任何库,无论是第三方库还是 C++ 标准库(由于环境限制)。稍后我知道如何对 char* 进行操作,但是如何在不使用 C++ 库的情况下将我的浮点值转换为字符串(即 char*)?
非常感谢任何帮助。
// 编辑:这是我目前的方法,但仍然不起作用(例如,对于 2.55555)。如何选择合适的阈值?
float abs(float number)
{
return (number > 0.0 ? number : number * -1);
}
int round(float number)
{
return (int)(number + 0.5);
}
void splitFloat(float* number, int* mantissa, int* exponent)
{
while (abs(*number - round(*number)) > 0.00001)
{
// *number -= (int)*number; // ???
*number *= 10.0;
*mantissa = *number;
*exponent += 1;
cout << "Number: " << *number << ", Mantisse: " << *mantissa << ", Exponent: " << *exponent << endl;
}
}
【问题讨论】:
-
您尝试做的事情没有任何意义。无论您的外部问题是什么,这可能都不是解决问题的明智方法。
-
如果您不使用 C++ 标准库,那么您几乎只是在编写 C,而忽略了许多有用的功能。
-
@Jon 的链接是针对使用
D的问题,但答案不受该语言的限制。 -
@madth3: ...这就是为什么我认为这是一个合法的骗局。
标签: c++ count floating-point digits