Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 10. 04. 2015 19:09 — Editoval SuchSoft (10. 04. 2015 19:15)

SuchSoft
Příspěvky: 25
Reputace:   
 

Problém so zaokrúhľovaním v jazyku C#

Chcem poprosiť, môj program sa správa dosť nezvyčajne.
Mám program:

Code:

double d = 0.1;
ushort s = 10;
ushort c = (ushort)s/d;

Výsledok je 9.

Upravil som takto:

Code:

double d = 0.1;
ushort s = 10;
ushort c = (ushort)Math.Round(s/d);

Výsledok je 10. Paráda, funguje to!
To som si myslel, že funguje, ale až tak moc nie :-(
Pozor, toto som nepochopil:

Code:

double d = 0.1;
ushort s = 10;
ushort c = (ushort)Math.Round(s/d);

ushort[] v = new ushort[10];
for (ushort i = 0; i<10; i++)
{
    v[i] = c;
}

Aký by som asi čakal výsledok? Že by v každom v[i] bola hodnota 10? No tak to som na dosť veľkom omyle, pretože výsledok je nasledovný:
v[0] = 10;
v[1] = 10;
v[2] = 10;
v[3] = 10;
v[4] = 10;
v[5] = 9;
v[6] = 10;
v[7] = 10;
v[8] = 10;
v[9] = 10;

V podstate je tam vždy jedna 9 na niektorom mieste. Vie mi niekto vysvetliť prečo?!
Toto vážne nechápem.

Ešte doplním, zvýšil som veľkosť poľa na 1000, vkladal som hodnotu 1000 (100/0.1), aj tak jeden prvok bol 999 a väčšinou vždy hneď na začiatku (jednociferný index).

Veľká vďaka za vysvetlenie, ale hlavne vyriešenie problému.

Offline

  • (téma jako vyřešené označil(a) SuchSoft)

#2 10. 04. 2015 19:31 — Editoval SuchSoft (10. 04. 2015 19:33)

SuchSoft
Příspěvky: 25
Reputace:   
 

Re: Problém so zaokrúhľovaním v jazyku C#

↑ SuchSoft:

ehm ehm, nechápačky.
Vytvoril som ešte jedno pole a vyplnil som ho tou istou premennou, dokonca v tom istom cykle.

Teraz bolo všade 10.
Tak som to vrátil do pôvodného stavu, všade je 10.

tak som vyhodil odtiaľ

Code:

Math.Round

a aký bol výsledok? No predsa c = s/d = 10 !!!

Môže takto zblbnúť prostredie, alebo čo? Nechápem.
Pracujem v .Net 4.0 v Visual C# Express 2010.

Takže všetko funguje ako má, len si niečo zo mňa vystrelilo. :-o

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson