题目描述
编写一个程序,其功能为:从键盘上输入一个浮点数(小数点后有三位数),然后分别输出该数的整数部分和小数部分。
样例输入:123.456
样例输出:123 456
思路分析
思路一
读入一个浮点型x,赋值给1个int型,得到整数
x*1000后再对1000取余得到最后三位数
bug:
321.123 输出 321 122
注意看左边
输入的是321.123
它存储的可能是321.122986
321.122986*1000 =321122.986
%1000=122
有一些数转化成的是无限的二进制浮点数
这是第一次精度缺失
二进制浮点数形式以IEEE标准表示
IEEE格式再转化成十进制,只能取有限位利用
这是第二次精度缺失
具体可以看这位大牛的 计算机存储——浮点数原理
改进
它保证原来的精确范围内是正确的
那我们保留0位小数即可
0.122986*1000 =122.986
保留0位小数位 122
代码如下
思路二
来自同学hmj
格式化读入 %d. %d
输出的时候格式化输出三位不足用前面0补
代码 去她的博客:戳这里戳这里
思路三
硬核解法!!来自同学rxj
直接用字符数组读入,分别输出小数点之前之后的部分
代码 去他的博客:戳这里戳这里
总结
众人拾柴火焰高!!!一起努力吧!!!