2011-08-07, 17:06
  #1
Bannlyst
Om jag har en string som r "13.33" och jag vill att den ska bli en float som r 13.33. Inte 13.33333300001 eller 13.00 eller 13.3300000000000000000001, bara 13.33.

Hur gr jag d?
Citera
2011-08-07, 17:20
  #2
Medlem
Du avrundar talet efter konverteringen om du har problem med att det blir fr mnga decimaler. Sen fr du ocks komma ihg att det inte alltid gr att beskriva alla flyttal exakt eftersom de representeras binrt i datorn.
Citera
2011-08-07, 17:22
  #3
Medlem
Smurfmeisters avatar
Kod:
>>> a = "13.33333300001"
'13.33333300001'
>>> a = float(a)
13.33333300001
>>> a = round(a, 2)
13.33

S skulle man kunna gra t.ex
Citera
2011-08-08, 00:17
  #4
Moderator
vhes avatar
Jag tror du vill kolla upp modulen decimal.
Citera
2011-08-08, 06:51
  #5
Bannlyst
Citat:
Ursprungligen postat av vhe
Jag tror du vill kolla upp modulen decimal.

Det fungerar som smurfmeister sade, men.. nr jag lgger in 13.33 i en lista s blir det 13.33000002 eller liknande.

Kod:
>>> "13,33"
>>> a.replace(",","."
>>> 
round(a2)
13.33
>>> lista = []
>>> 
lista.insert(0a)
>>> 
lista
[13.330000002
Citera
2011-08-08, 09:55
  #6
Moderator
vhes avatar
Citat:
Ursprungligen postat av Heavy.Is.Happy
Det fungerar som smurfmeister sade, men.. nr jag lgger in 13.33 i en lista s blir det 13.33000002 eller liknande.

Kod:
>>> "13,33"
>>> a.replace(",","."
>>> 
round(a2)
13.33
>>> lista = []
>>> 
lista.insert(0a)
>>> 
lista
[13.330000002

Japp. Generellt s kan du aldrig rkna med att ett flyttal kommer att behlla exakt vrdet du frvntar dig. De r, utom i fall du har "tur" och de faktiskt har en exakt binr representation av talet, alltid avrundningar (dr "avrundning" allts innebr avrundning mot nrmsta binra representation, s de behver inte alls se "avrundade" ut nr man ser p dem som decimaltal).

Lite frklaringar och mer info kan hittas p http://docs.python.org/tutorial/floa...#tut-fp-issues

decimal-modulen finns fr att hantera just det hr problemet. Personligen brukar jag undvika att anvnda flyttal alls, om det gr.
Citera
2011-08-08, 11:01
  #7
Bannlyst
Citat:
Ursprungligen postat av vhe
Japp. Generellt s kan du aldrig rkna med att ett flyttal kommer att behlla exakt vrdet du frvntar dig. De r, utom i fall du har "tur" och de faktiskt har en exakt binr representation av talet, alltid avrundningar (dr "avrundning" allts innebr avrundning mot nrmsta binra representation, s de behver inte alls se "avrundade" ut nr man ser p dem som decimaltal).

Lite frklaringar och mer info kan hittas p http://docs.python.org/tutorial/floa...#tut-fp-issues

decimal-modulen finns fr att hantera just det hr problemet. Personligen brukar jag undvika att anvnda flyttal alls, om det gr.

Har kollat p decimalmodulen, men har inte hittat ett exempel som passar till det jag ska gra.
Citera
2011-08-08, 11:27
  #8
Medlem
Smurfmeisters avatar
http://docs.python.org/library/decim...module-decimal

Frsta exemplet visar vl exakt vad du vill gra?

Tips: Tv frsta raderna i den frsta grna rutan
Citera
2011-08-08, 13:53
  #9
Bannlyst
Citat:
Ursprungligen postat av Smurfmeister
http://docs.python.org/library/decim...module-decimal

Frsta exemplet visar vl exakt vad du vill gra?

Tips: Tv frsta raderna i den frsta grna rutan

Wow! Thx Dr.Green...you're tha shiieeett.

Kod:
>>> from decimal import *
>>> 
getcontext().prec 2
>>> "13,33" 
>>> a.replace(",",".")  
>>> 
round(a2
13.33 
>>> lista = [] 
>>> 
lista.insert(0Decimal(a)) 
>>> 
lista 
[13.33

Eller?
Citera
2011-08-08, 14:11
  #10
Moderator
vhes avatar
Citat:
Ursprungligen postat av Heavy.Is.Happy
Kod:
>>> from decimal import *
>>> 
getcontext().prec 2
>>> "13,33" 
>>> a.replace(",",".")  
>>> 
round(a2
13.33 
>>> lista = [] 
>>> 
lista.insert(0Decimal(a)) 
>>> 
lista 
[13.33

Har du verkligen frskt kra den koden? Den ser inte fungerande ut... round() p en strng?

I alla fall s knns det som att g lite ver n efter vatten nr man blandar in floats och avrundar och grejar...

Kod:
>>> import decimal
>>> a = decimal.Decimal('13.33')
>>> lista = []
>>> lista.append(a)
>>> lista
[Decimal('13.33')]
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in