一个输出小数的程序,最后一位小数为什么输出异常?

一个输出小数的程序,最后一位小数为什么输出错误???
C/C++ code

int printDecimal(double f, int decPlaces) // decPlaces表示小数个数
{
    int intPart = 0;
    for (int i = 0; i < decPlaces; ++i) {
        f *= 10;
        intPart = (int)f;
        printDigit(intPart); // 此函数只能输出单个数字,也就是只能输出0到9之间的整数
        f = f - intPart;
    }
    cout << "---" << endl;
    return 0;
}


printfDecimal(0.123, 3);为什么输出为0.122 ?


------解决方案--------------------
0.123在内存中存的值是0.1229999....所以你打印三位出来的是0.122,你可以打印4位看看
------解决方案--------------------
没搞懂浮点数的本质
不要写这类程序

不久前有个类似的帖
http://topic.****.net/u/20121007/19/45e68c30-4fe9-4c9f-b18f-69da83c7d8ca.html
------解决方案--------------------
浮点数在计算机中存储的是不精确的数
------解决方案--------------------
你不如把浮点转成字符串,然后输出string的各个字符为妙
------解决方案--------------------
上伪代码:
Perl code

def print_dec(f,i)
    af = f.to_s.split('')
    i=-1 if i== 0
    af[0..af.index('.')+i].each {|c|printf c}
end