Seuraa 
Viestejä45973

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)

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?

Sisältö jatkuu mainoksen alla
Sisältö jatkuu mainoksen alla

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
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.

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
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

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

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.

Suosituimmat

Uusimmat

Sisältö jatkuu mainoksen alla

Uusimmat

Suosituimmat