float 値の小数点以下の桁数を計算する必要があります。
1234.567 -> 3 2.1233 - > 4
4.2432 ->
4
私の最初のアイデアは次のとおりです。
number = 1234.567;
...
while (number - (int)number > 0.0)
{
// Count decimal places
...
number *= 10;
}
ただし、これにより、while 条件の float 精度に問題が生じます。唯一の安全な回避策は、float から string に変換してから、string ベースで小数点以下の桁数をカウントすることです。
問題は次のとおりです。サードパーティ製ライブラリも C++ 標準ライブラリも (環境上の制限により) ライブラリを使用してはなりません。後で char* を操作する方法は知っていますが、C++ ライブラリを使用せずに float 値を文字列 (つまり 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;
}
}