Python ongelma

Seuraa 
Viestejä45973
Liittynyt3.9.2015

Miten voin pyöristää minkä tahansa luvun 0.1 desimaalin tarkkuuteen?

joku = float(input("Syötä joku: ")) # joku = 4
print joku/10
0.40000000000000002

nyt, haluan että vastaus on täsmälleen 0.4, miten sen teen?

Kommentit (11)

Vierailija

Miten voin pyöristää minkä tahansa luvun 0.1 desimaalin tarkkuuteen?

joku = float(input("Syötä joku: ")) # joku = 4
print joku/10
0.40000000000000002

nyt, haluan että vastaus on täsmälleen 0.4, miten sen teen?

simson
Seuraa 
Viestejä124
Liittynyt22.3.2008

Kerro luku kymmenellä, muuta kokonaisluvuksi (tai poista desimaaliosa) ja jaa kymmenellä.
Pythonin funktioiden nimiä en tunne täsmälleen.

Vierailija

Ei ainakaan tällä onnistu:
[code:1t5gb5v8]# -*- coding: latin-1 -*-
import math
while 1==1:
print""
print""
print""
print"Alueen optimointia 0.1 desimaalin tarkkuudella."
piiri=float(input("Syötä piiri: "))
print(piiri/2/2)**2
print""
piiris=int(((piiri/2/2)**2)*10)
print float(piiris/10)[/code:1t5gb5v8]

Tarkoitus on siis optimoida pinta-ala annetusta piiristä.

Int muuntaa kokonaisluvuksi, float muuntaa desimaaliksi.

Tältä se näyttää:

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 1
0.0625

0.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 2
0.25

0.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 3
0.5625

0.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 4
1.0

1.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 5
1.5625

1.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 6
2.25

2.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 7
3.0625

3.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 8
4.0

4.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 9
5.0625

5.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 10
6.25

6.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 11
7.5625

7.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 12
9.0

9.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 13
10.5625

10.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 14
12.25

12.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 15
14.0625

14.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 16
16.0

16.0

Alueen optimointia 0.1 desimaalin tarkkuudella.
Syötä piiri: 0
0.0

0.0

Bosco
Seuraa 
Viestejä167
Liittynyt6.5.2010
simson
Kerro luku kymmenellä, muuta kokonaisluvuksi (tai poista desimaaliosa) ja jaa kymmenellä.
Pythonin funktioiden nimiä en tunne täsmälleen.



Tuohon pitää vielä lisätä 0.5 ,eli:

Kerro luku kymmenellä, lisää 0.5, muuta kokonaisluvuksi (tai poista desimaaliosa) ja jaa kymmenellä.

Tulosteessa liukulukua saattaa vielä joutua muotoilemaan, mikäli liukuluvun sisäinen esitystapa on binääriluku.

Vierailija

Ei toimi tuokaan tällä:

[code:27b1yu1u]# -*- coding: latin-1 -*-
import math
while 1==1:
print""
print""
print""
print"Alueen optimointia 0.1 desimaalin tarkkuudella."
piiri=float(input("Syötä piiri: "))
print(piiri/2/2)**2
print""
piiris=int((((piiri/2/2)**2)*10)+0.5)
print float(piiris/10)
[/code:27b1yu1u]

Bosco
Seuraa 
Viestejä167
Liittynyt6.5.2010
FacotaFI
Ei toimi tuokaan tällä:

[code:2d6sua3r]# -*- coding: latin-1 -*-
import math
while 1==1:
print""
print""
print""
print"Alueen optimointia 0.1 desimaalin tarkkuudella."
piiri=float(input("Syötä piiri: "))
print(piiri/2/2)**2
print""
piiris=int((((piiri/2/2)**2)*10)+0.5)
print float(piiris/10)
[/code:2d6sua3r]




Viimeinen rivi:
print float(piiris/10) tulisi olla print float(piiris/10.0)

idiotus
Seuraa 
Viestejä1907
Liittynyt8.12.2007

round näyttäisi toimivan
http://docs.python.org/library/functions.html
[code:6xa8rykq]>>> print round(0.9,1)
0.9
>>> print round(0.99999,1)
1.0
>>> print round(0.54,1)
0.5
>>> print round(0.45,1)
0.5
>>> print round(0.56,1)
0.6
>>> print round(0.09,1)
0.1
>>> print round(0.12,1)
0.1[/code:6xa8rykq]

Quidquid latine dictum sit, altum videtur.

In porto perse vitulus est.

Rousseau: "tämä keskustelufoorumi saattaa aiheuttaa itsetuhoisuutta, käytettävä vain hoitohenkilökunnan valvovan silmän alla ja/tai hyvin lääkittynä".

Varoitus! Saatan leikkiä välillä paholaisen asianajajaa jopa tiedostamatta sitä.

abskissa
Seuraa 
Viestejä3654
Liittynyt9.10.2008

No joo, tämä menee ehkä vähän ohi aiheen. Tuollaiseen numeeriseen optimointiin ne tavan liukuluvut tietenkin sopivat mainiosti. Jos kuitenkin törmäät liukulukujen kanssa sellaisiin ihmeellisyyksiin, että erotukset eivät menekään nollaan silloin kun pitäisi, yhtäsuuruusvertailu ei pelaa, tai että luvut näyttävät pyöristyvän väärään suuntaan, niin kannattaa opetella pidemmällekin.

FacotaFI
Liukuluku = desimaaliluku.

Ei ole. Ainakaan jos liukuluvulla tarkoitetaan binääristä liukulukua, kuten Pythonin float.

Esim. tuosta Pythonin decimalin kuvauksesta:

Python v2.6.5 documentation
Decimal numbers can be represented exactly. In contrast, numbers like 1.1 do not have an exact representation in binary floating point. End users typically would not expect 1.1 to display as 1.1000000000000001 as it does with binary floating point.



Täällä on tietoa asiasta oikein perusteellisesti:
What Every Computer Scientist Should Know About Floating-Point Arithmetic

Täällä taas on väännetty asiaa rautalangasta:
Stack Overflow: "Why can’t decimal numbers be represented exactly in binary?"

We're all mad here.

Uusimmat

Suosituimmat