鱼C论坛

 找回密码
 立即注册
查看: 2133|回复: 7

[已解决]Python运算所得的数字为什么是一个近似值

[复制链接]
发表于 2017-8-23 12:33:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> 2.3-1.7
0.5999999999999999
>>> 2.3/0.01
229.99999999999997
>>> 2.01-0.01
1.9999999999999998
>>> 2.0-0.01
1.99
2.3-1.7为什么不是0.6呢?
最佳答案
2017-8-23 14:23:18
你可以用debug跟入源码查看运算法则,自然就会明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-23 13:15:59 | 显示全部楼层
你四舍五入就好了嘛~!干嘛纠结这些
>>> round(2.3-1.7,1)
0.6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-23 13:45:59 | 显示全部楼层
ba21 发表于 2017-8-23 13:15
你四舍五入就好了嘛~!干嘛纠结这些
>>> round(2.3-1.7,1)
0.6

不不不,插值的时候有影响。另外我想搞明白为什么会这样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-23 14:20:07 | 显示全部楼层
1. 取整:


(1) int(): 类型工厂函数。
对于浮点数只截取整数部分,丢弃小数部分
int(3.1)   返回:3
int(3.5)  返回:3
int(3.923)  返回:3
int(-12.34)  返回:-12
数字字符串转换为整数:
  int('23')     返回:23     # 默认base=10 (Valid bases are 0 and 2-36)
int('23', base=8)  返回:19   (8进制)
int('23', base=16)   返回:35
int('A', base=16),  int('0a', base=16), int('0x0a', base=16)   都返回:10
int('0b100', base=2)   返回:4


无法转换的情况:
int('-123.45')    错误:无法转换
int('34.45')   错误:无法转换
int('23a')    错误:无法转换


不同进制数的表示方法:
八进制:0o177, 0O177  (十进制127)   Python3.x表示方法,Python2.x中表示为: 0177
十六进制:0x9ff,0X9FF
二进制:0b101010,  0B101010  


将整数转换为不同进制的字符串:
hex(I):将给定的整数转换为十六进制表示的字符串
hex(100)    返回:'0x64'
hex(0xAF)    返回:'0xaf'
oct(I):将给定的整数转换为八进制表示的字符串
oct(100)     返回:'0o144'
oct(0O100)    返回: '0o100'
bin(I):将给定的整数转换为二进制表示的字符串
bin(10)     返回:'0b1010'
bin(0B10)   返回:'0b10'


使用str()函数将数字转换为字符串:
str(100)   返回:'100'
str(-100)   返回:'-100'
str(12.23)   返回:'12.23'
str(-34.23)  返回:'-34.23'
str(0x123)   返回:'291'
str(2.0)    返回:'2.0'
str(2.00)    返回:'2.0'
str(float(2))   返回:'2.0'
str(float(-2))   返回:'-2.0'
str(float('3.24'))  返回:'3.24'
str(12a)   错误:语法错误

(2) 内置函数round():四舍五入取整
round(number, ndigits=None)  # ndigits是保留小数点后几位,默认为0
round(2.3)   返回:2
round(2.8)   返回:3
round(0.5)   返回:0     ???
round(1.5)   返回:2
round(2.5)   返回:2     ???
round(3.5)   返回:4
round(4.5)   返回:4     ???
round(4.501)   返回:5
round(5.5)   返回:6
   ### 整数位为奇数时,小数为.5时取整时可以进位,但如果整数位为偶数时,小数为.5时取整时是不进位的???
round(-2.4)   返回:-2
round(-2.5)   返回:-2    ???
round(-2.6)   返回:-3
round(-3.4)   返回:-3
round(-3.5)   返回:-4   
round(-3.6)   返回:-4
(3) math模块的floor()函数:取小于等于的整数
math.floor(0.3)  返回:0
math.floor(-0.3)  返回:-1   # 与int(-0.3)=0不同
math.floor(1.5)  返回:1
math.floor(1.8)  返回:1
math.floor(-1.1)  返回:-2
math.floor(-1.8)  返回:-2



2. 浮点数保留几位小数:


(1) 内置函数round():
round(number, ndigits=None)  # ndigits是保留小数点后几位,默认为0
round(2,1)   返回:2
round(2.0,1)   返回:2.0
round(2.2,1)   返回:2.2


round(2.24,1)   返回:2.2
round(2.25,1)   返回:2.2  ???
round(2.26,1)   返回:2.3


round(2.34,1)   返回:2.3
round(2.35,1)   返回:2.4
round(2.36,1)   返回:2.4


round(3.24,1)   返回:3.2
round(3.25,1)   返回:3.2
round(3.26,1)   返回:3.3


round(3.34,1)   返回:3.3
round(3.35,1)   返回:3.4
round(3.36,1)   返回:3.4

round(1.23456, 4)  返回: 1.2346


(2) float(): 类型工厂函数。
float(2)  返回:2.0
float(-2)  返回:-2.0
float(2.134)  返回:2.134
float('2') 返回:2.0  
float('-2')  返回:-2.0
float('-2.3456')  返回:-2.3456
float('-2.34a')   错误:无法转换


(3) 浮点数转换为字符串:
str(2.0)    返回:'2.0'
str(2.00)    返回:'2.0'
str(-3.24)    返回:'-3.24'
'%f'%2   返回:'2.000000'
'%f'%2.0   返回:'2.000000'
'%f'%2.01   返回:'2.010000'
'%.2f'%2   返回:'2.00'
'%.4f'%2.123456   返回:'2.1235'  # 四舍五入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-23 14:23:18 | 显示全部楼层    本楼为最佳答案   
你可以用debug跟入源码查看运算法则,自然就会明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-23 15:06:02 | 显示全部楼层
这是计算机的浮点数偏差问题,其实也不算是问题,而是特性
计算机都这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-25 08:17:55 | 显示全部楼层
新手·ing 发表于 2017-8-23 15:06
这是计算机的浮点数偏差问题,其实也不算是问题,而是特性
计算机都这样

这个我知道,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-25 08:18:34 | 显示全部楼层
黎明§末日 发表于 2017-8-23 14:23
你可以用debug跟入源码查看运算法则,自然就会明白

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 17:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表