Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



VB6 a zaokrouhlení 4 místného čísla na 3 místa

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: Luboš

19:44:21 16.06.2009

Funkce Round se už v minulosti několikrát řešila. Nejlepší řešení asi bude použití příkazu Format, případně klasicky:
pocet_mist = 3
cislo = (Int(cislo * (10 ^ pocet_mist) + 0.5) / 10 ^ pocet_mist)

Problém ukládání reálných čísel v počítači se řeší od nepaměti. Všechny diskuse končili nějakým kompromisem. Pokud se budou čísla ukládat ve dvojkové soustavě, tak problémy budou stále. Za úvahu stojí, zda by vám nestačil datový typ Currency - (tj. čtyři desetiná místa), který je uložen v celočíselném formátu.

Citovat příspěvek

 

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: Maty

14:16:00 16.06.2009

to rudis:tak o tomhle standardu slyším prvně v životě, no všechno je jednou poprvé...

Citovat příspěvek

 

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: policky

12:26:12 16.06.2009

S tím souhlasím, že jsou pomalejší. Záleží i na tom, kolik operací zaokrouhlení předpokládá.

Nicméně, už jsem zažil situaci, kdy celá zpráva spadla pod stůl, protože čísla neseděly (s oblibou jsem to svým podřízeným dělal taky :) ). Prostě, pokud čísla přesně nesedí, znedůvěryhodní to celý postup / dílo / zprávu / program.

Citovat příspěvek

 

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: Rudis

12:15:52 16.06.2009

Tak převod na text, oříznutí a porovnání bych řekl, že bude o dost pomalejší než, jak psala Gábina, udělat rozdíl hodnot a pak porovnávat nějakou předepsanou toleranci.

Řetězcové operace jsou nesrovnatelně pomalejší než číselné!

Citovat příspěvek

 

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: policky

11:55:05 16.06.2009

A co to udělat tak, že to zaokrouhlíš převedeš na text, ořízněš a porovnáš textové řeťezce? :)

Citovat příspěvek

 

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: Gábina

11:48:42 16.06.2009

Další podobnou legraci mám za sebou s porovnáváním
čísel s osmi desetinými místy deklarovaných double.
Bez rozdílu i když použiji fix nebo round se nikdy
nepodařilo najít všechna evidentně shodná čísla.
Překvapivě není v některých případech rozdíl původních,
zaokrouhlených ani ořezaných čísel opravdu roven 0. :-)
:-(
Nakonec v zoufalství používám funkci, která zjištuje
zda je rozdíl dvou hodnot v mnou předepsané toleranci.

Citovat příspěvek

 

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: Rudis

11:29:45 16.06.2009

Ahoj,
toto zaokrouhlování je správně dle standardu IEEE, to že to nesedí na naše zaokrouhlování je věc jiná.

Standard to definuje následovně:

Hodnota .5 je zaokrouhlena na:

n když n je sudý
n+1 když n je kladné liché
n-1 když n je záporné liché

Citovat příspěvek

 

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: Maty

11:00:31 16.06.2009

to je fakt hustý
Round("0,545", 2) = 0.55 'v pořádku
Round("0,5435", 3) = 0.544 'v pořádku

Round("0,545", 2) = 0.55 'v pořádku
Round("0,5445", 3) = 0.544 'blbě

Round("0,545", 2) = 0.55 'v pořádku
Round("0,5455", 3) = 0.546 'v pořádku

Round("0,545", 2) = 0.55 'v pořádku
Round("0,5465", 3) = 0.546 'blbě

Round("0,545", 2) = 0.55 'v pořádku
Round("0,575", 3) = 0.548 'v pořádku

další zkusim hádat ... blbě,kdyžtak to někdo testněte ;)


zřejmě číslo které díky rozkladu na zlomky vyvolá takovýto úkaz-no čučim jak péro

Citovat příspěvek

 

Re: VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: Josef79

10:50:13 16.06.2009

Tak jsem to udělal jako Format(cislo, "0.000")

Citovat příspěvek

 

VB6 a zaokrouhlení 4 místného čísla na 3 místa

Autor: Josef79

10:34:25 16.06.2009

Zdravím.
Mám problém s tím, že když má číslo 3 a více desetiných míst, nefunguje zaokrouhlení.
Číslo je jako string načtený z výpočtů v excelu, kde to vyhodí 0,5445

Round("0,545", 2) = 0.55 'v pořádku
Round("0,5445", 3) = 0.544 'blbě

Nefunguje to, ani když to dám do double.

Sice by to šlo udělat jako Round("0,5445" + 0.0001, 3) = 0.545, ale to je prasárna.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: