分离浮点数

题目描述

编写一个程序,其功能为:从键盘上输入一个浮点数(小数点后有三位数),然后分别输出该数的整数部分和小数部分。
样例输入: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
直接用字符数组读入,分别输出小数点之前之后的部分
代码 去他的博客:戳这里戳这里

总结

众人拾柴火焰高!!!一起努力吧!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值