浮点输出为3.0,整数为2

Python/PHP/Perl 开发与设计
回复
头像
renxinzhi
帖子: 970
注册时间: 2007-11-02 13:46
送出感谢: 0
接收感谢: 1 次

浮点输出为3.0,整数为2

#1

帖子 renxinzhi » 2012-10-29 10:18

代码: 全选

#!/usr/bin/env python
# -*- coding: utf-8 -*-
money = float(raw_input("输入你的钱数:"))
coins_25 = money // 0.25
coins_10 = (money % 0.25) // 0.10
coins_5 = ((money % 0.25) % 0.10) // 0.05
coins_1 = ((money % 0.25) % 0.10)*100 % 5
print "一分硬币数量:", coins_1
print "%.2f元可以兑换成%d个25分硬币,%d个10分硬币,%d个5分硬币和%d个1分硬币" % (money,
        coins_25, coins_10, coins_5, coins_1)
>>> ================================ RESTART ================================
>>>
输入你的钱数:0.96
一分硬币数量: 1.0
0.96元可以兑换成3个25分硬币,2个10分硬币,0个5分硬币和0个1分硬币
>>> ================================ RESTART ================================
>>>
输入你的钱数:0.16
一分硬币数量: 1.0
0.16元可以兑换成0个25分硬币,1个10分硬币,1个5分硬币和1个1分硬币
>>> ================================ RESTART ================================
>>>
输入你的钱数:0.18
一分硬币数量: 3.0
0.18元可以兑换成0个25分硬币,1个10分硬币,1个5分硬币和2个1分硬币
>>> ================================ RESTART ================================
为毛float(coins_1)和int(coins_1)会有这种差别?
明察,慎思,笃行
头像
枫叶饭团
论坛版主
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
送出感谢: 1 次
接收感谢: 132 次
联系:

Re: 浮点输出为3.0,整数为2

#2

帖子 枫叶饭团 » 2012-10-29 11:04

精度问题。。。其实那个所谓的1.0离1还差那么一点点,所以。。。
你把coins_1拿来减去整数就能看到差多少了。
第一个差4.66293670343e-15才能到1
头像
renxinzhi
帖子: 970
注册时间: 2007-11-02 13:46
送出感谢: 0
接收感谢: 1 次

Re: 浮点输出为3.0,整数为2

#3

帖子 renxinzhi » 2012-10-29 12:10

枫叶饭团 写了:精度问题。。。其实那个所谓的1.0离1还差那么一点点,所以。。。
你把coins_1拿来减去整数就能看到差多少了。
第一个差4.66293670343e-15才能到1
那使用round四舍五入一下就解决了,至少现在貌似正常了,不知道有没有什么隐患。
明察,慎思,笃行
回复

回到 “Python/Php/Perl”