一个输出小数的程序,最后一位小数为什么输出异常?
一个输出小数的程序,最后一位小数为什么输出错误???
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的各个字符为妙
------解决方案--------------------
上伪代码:
- 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