浮動小数点値の整数部分と小数部分を抽出しようとしていますが、おそらく浮動小数点数の不正確な格納方法が原因で、奇妙な丸めの問題が発生しているようです。
小数部分を抽出するために、次のようなコードがあります。
double number = 2.01;
int frac = int(floor(number * 100)) % 100;
ただし、ここの結果は 1 ではなく 0 として出力されます。これは、元の double が実際には次のように格納されるためと思われます。
2.0099999...
ただし、sprintf を実行すると、このような変換が正しく行われるようです。
char num_string[99];
sprintf(num_string,"%f",number);
上記の方法では正しい答えが得られないのに、sprintf はどのようにして正しい答えを得るのでしょうか?