網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、python運(yùn)算時(shí)精度問(wèn)題
1.運(yùn)行時(shí)精度問(wèn)題
在Python中(其他語(yǔ)言中也存在這個(gè)問(wèn)題,這是計(jì)算機(jī)采用二進(jìn)制導(dǎo)致的),有時(shí)候由于二進(jìn)制和十進(jìn)制之間對(duì)應(yīng)問(wèn)題會(huì)導(dǎo)致數(shù)值的精度問(wèn)題,比如無(wú)法用有限個(gè)二進(jìn)制位完整地表示0.1,因?yàn)?.1轉(zhuǎn)化為二進(jìn)制之后位一個(gè)無(wú)限循環(huán)小數(shù)
print(1.1*2.2)
查看運(yùn)行結(jié)果:
2.解決方案:添加方法
需要將整數(shù)部分與小數(shù)部分單獨(dú)做處理可以解決
def multiple(m1, m2):
r=''
## 若存在浮點(diǎn)型,則先轉(zhuǎn)化為整數(shù)
if type( m1 )==float or type( m2 )==float:
print( "存在浮點(diǎn)數(shù)" )
len_m1=len( str( m1 ).split( "." )[1] )
len_m2=len( str( m2 ).split( "." )[1] )
print( "m1的小數(shù)位:", len_m1 )
print( "m2的小數(shù)位:", len_m2 )
m1=int( 10**len_m1*m1 )
m2=int( 10**len_m2*m2 )
print( "m1化為整數(shù):", m1 )
print( "m2化為整數(shù):", m2 )
r=str( m1*m2 )
print( "r:", r )
l=len_m1+len_m2
print( "l的總長(zhǎng)度:", l )
if l<len( r ):
r_front=r[:-l]
r_last=r[-l:]
print( r_front, "-", r_last )
r=r_front+"."+r_last
else:
r="0."+(l-len( r ))*"0"+r
else:
print( "不存在浮點(diǎn)數(shù)" )
r=m1*m2
return r
res = multiple(1.1,2.2)
print(res)
查看運(yùn)行結(jié)果:
二、python四舍五入時(shí)精度問(wèn)題
1.使用round與浮點(diǎn)數(shù)格式化時(shí)候的精度問(wèn)題
歸根結(jié)底是計(jì)算機(jī)存儲(chǔ)浮點(diǎn)數(shù)的問(wèn)題
a1 = 0.235
a2 = round(a1,2)
a3 = '%.2f' % a1
print(a2)
print(a3)
查看運(yùn)行結(jié)果:
?2.解決方案,使用Decimal函數(shù)
需要將float轉(zhuǎn)換為Decimal,該類可以通過(guò)接受字符串(務(wù)必是字符串)形式的浮點(diǎn)數(shù)實(shí)現(xiàn)相對(duì)精確的小數(shù)計(jì)算(減緩了精度誤差,但沒(méi)有消滅)
from decimal import Decimal
a1 = 0.235
a2 = Decimal(str(a1)).quantize(Decimal("0.00"))
a3 = '{:.2f}'.format(Decimal(str(a1)))
print(a2)
print(a3)
查看運(yùn)行結(jié)果:
原文鏈接:https://www.cnblogs.com/mrwhite2020/p/16637914.html
相關(guān)推薦
- 2022-08-14 Android實(shí)現(xiàn)顯示和隱藏密碼功能的示例代碼_Android
- 2022-08-22 C++動(dòng)態(tài)規(guī)劃算法實(shí)現(xiàn)矩陣鏈乘法_C 語(yǔ)言
- 2023-02-26 C++中的各種容器的使用方法匯總_C 語(yǔ)言
- 2022-05-04 python運(yùn)算符+條件結(jié)構(gòu)+循環(huán)結(jié)構(gòu)_python
- 2022-12-09 c++結(jié)合opencv如何實(shí)現(xiàn)讀取多張圖片并顯示_C 語(yǔ)言
- 2022-10-18 使用shell腳本快速登錄容器的實(shí)現(xiàn)步驟_linux shell
- 2022-10-08 C#中32位浮點(diǎn)數(shù)Float(Real)一步步按位Bit進(jìn)行分析_C#教程
- 2022-09-18 Python動(dòng)態(tài)配置管理Dynaconf的實(shí)現(xiàn)示例詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支