< návrat zpět

MS Excel


Téma: Práce s dlouhými celými čísly rss

Zaslal/a 24.1.2016 13:23

Je všeobecně známé, že Excel pracuje na 15 platných cifer. V rámci tohoto pravidla je Excel schopný v buňce zobrazit celé číslo 999999999999999 a také s ním jako s celým číslem pracovat. Potřebuje k tomu jediné, a to numericky naformátovanou buňku (např. "0" nebo "# ##0"). Při obecném naformátování se nám od 12.cifry začne v buňce zobrazovat semilogaritmická podoba čísla (tzv.vědecký formát).
Z hlediska VBA je v této schopnosti práce s celými čísly na listu skryta dost významná zrada. Pro práci s dlouhými celými čísly má VBA k dispozici čtyřbytovou proměnnou Long se zaručeným rozsahem 9 platných cifer. Celá čísla z listu v rozsahu 10 až 15 cifer se tak ve VBA dostávají "do pásma nikoho".
Znalci Excelu mi mohou oponovat typem LongLong a Decimal; první z nich umí pouze 64bitový Excel, ten druhý neumí skoro nikdo. A to prosím nemluvím o skvělém doplňku xlPrecision, pro který není ani 200 platných cifer překážkou.
Na problém mne přivedl elninoslov, když začal skloňovat názvy jednotek zobrazeného času. To mi připomnělo notorickou úlohu slovního vyjádření finanční částky, požadovanou v některých úředních dokumentech. Existuje houf řešení této úlohy i pro Excel. Já jsem si přitom vzpomněl na někdejšího českého ministra financí, který veřejně přiznal, že neví, kolik nul má bilion. S vědomím, že Excel umí 15 celých cifer, rozhodl jsem se "pro pana ministra" napsat proceduru "částka slovy", která vy uměla i ty zrádné biliony.
Proceduru, která uměla všechny miliony, jsem si kdysi napsal. Když jsem ji teď chtěl rozšířit do bilionů, tvrdě jsem narazil. Proměnná Long umí něco přes dvě miliardy a dál ani ťuk. Když jsem ty biliony ale chtěl, musel jsem a věc z jiné strany.
Původně jsem patnáctimístné celé číslo rozdělil na "dolní Long" pro spodních devět řádů a "horní Long" pro zbylých šest řádů. To sice fungovalo, ale pro částku slovy to bylo dost neohrabané. Proto jsem přešel na rozdělení znakového řetězce s patnácti ciframi na pět tříznakových skupin pro jednotky, tisíce, miliony, miliardy a biliony. Z tohoto rozdělení už bylo poskládání částky slovy vcelku snadné. Jak rozdělení dlouhého celého čísla na dvě Long, tak trojmístné skupiny pro částku slovy najdete v příloze.

Příloha: zip29516_cislapreslong.zip (25kB, staženo 63x)
Zaslat odpověď >

Strana:  1 2   další »
#029523
avatar
No ak by niekto chcel presnejšiu vzdialenosť zeme od slnka ako na milimetre, tak tomu excel asi nebude vyhovovať. 2citovat
#029524
avatar
Náhodou mi se to bude náramně hodit až budu vypisovat složenky. Vždycky jsem měl s těmi miliony a biliony problém. 1citovat
#029526
elninoslov
AU
Wiki : 149597870700000 mm
Google : 149600000000000 mm

To vozítko Google to zase odfláklo.
stočtyřicetdevět=bilionů=pětsetdevadesátsedm=miliard=osmsetsedmdesát=milionů=sedmset=tisíc=milimetrů

Keď do toho ale vnesieme, že je to iba priemerná vzdialenosť, a šábneme to zakrivením časopriestoru, no ... niekto to bude musieť premerať mikrometrom 5citovat
#029527
avatar
Ja som si kedysi musel vystačiť s logaritmickým pravítkom(keď ešte kalkulačky neboli ani v tuzexe). A tam sa dala dosiahnuť presnosť max. na 4 platné číslice. A muselo to stačiť.citovat
#029528
avatar
@marjankaj
Na pozici účetního bych Vás tedy s logárkem nebral. 1

@vovka.h
S typem currency to nešlo?citovat
#029531
avatar

lubo napsal/a:

@marjankaj
Na pozici účetního bych Vás tedy s logárkem nebral.

No na logárku spočítavania a odčítavanie moc nešlo.
Ale statické výpočty sa dali.
Inak na geodetické výpočty sme mali také mechanické kalkulačky(nie sčoty). Tam sa už naozaj vyžadovala presnosť.
Asi takéto
https://sk.wikipedia.org/wiki/Kalkula%C4%8Dka#/media/File:Nisa_K.JPG
Dokonca sa na tom dalo aj odmocňovať(druhá odmocnina)citovat
icon #029534
eLCHa
@TEDO
kdybyste potřeboval více, tak také mám vlastní funkci CISLO_SLOVY. V případě, že byste potřeboval rozlišit platbu do ameriky, umí i krátkou soustavu. V dlouhé soustavě jsem to omezil na kvintiliardy (tedy v krátké deciliony). Říkal jsem si, že mi v práci stejně asi více nedají, tak další už jsem neřešil ;)

Private Const sORDERS_DEF As String = "0, , , , , , ," & _
"10, tisíc , tisíc , tisíce , tisíc , tisíc , tisíce ," & _
"10, milionů , milion , miliony , milionů , milion , miliony ," & _
"0, miliard , miliarda , miliardy , bilionů , bilion , biliony ," & _
"10, bilionů , bilion , biliony , trilionů , trilion , triliony ," & _
"0, biliard , biliarda , biliardy , kvadrilionů , kvadrilion , kvadriliony ," & _
"10, trilionů , trilion , triliony , kvintilionů , kvintilion , kvintiliony ," & _
"0, triliard , triliarda , triliardy , sextilionů , sextilion , sextiliony ," & _
"10, kvadrilionů , kvadrilion , kvadriliony , septilionů , septilion , septiliony ," & _
"0, kvadriliard , kvadriliarda , kvadriliardy , oktilionů , oktilion , oktiliony ," & _
"10, kvintilionů , kvintilion , kvintiliony , nontilionů , nontilion , nontiliony ," & _
"0, kvintiliard , kvintiliarda , kvintiliardy , decilionů , decilion , deciliony"
citovat
#029536
Hav-Ran
Tento môj bleskový rátač zvládne 13 miest, používal som ho kedysi v REMPE 2
Příloha: zip29536_bleskoratac.zip (199kB, staženo 31x)
citovat
#029538
avatar
Srandičky, srandičky! Vůbec jsem nečekal, kolik veselí způsobím 5 . Ale připomínka od Luba s datovým typem Currency je velmi užitečná. Nevzpomněl jsem si, nezkusil jsem, vyzkouším! Dík.
Jinak má elCHa pravdu s tím, že v názvech jednotek je pěkný nevěstinec! Evropská miliarda je americký billion a evropský bilion je americký trillion. To mi řekla Wikipedie. A to, že tisíc evropských bilionů je evropská biliarda (americký quadrillion), jsem si tam přečetl premiérově.
Smyslem vlákna bylo připomenout nepokryté pásmo ve VBA mezi desátou a patnáctou cifrou v celých číslech. To Currency mi možná odpoví. Jinak jde v zásadě o malér, který právě v účetnictví vyvolává zaokrouhlování. Součet zaokrouhlených čísel není nutně shodný se zaokrouhleným součtem čísel. A pro účetního je chybějící koruna prakticky stejný problém jako chybějící milion.
Pokud se nechci dostat do zaokrouhlovacích pastí, měl bych zaokrouhlování a čísla Single /Double pokud možno vynechat. To platí pro práci s penězi stejně jako pro práci s časem. Když budu v penězích pracovat celočíselně s haléři / centy (v čase se sekundami), vyhnu se "rozmazání" konců takových čísel. No a tady se mi snadno mohou hodit ona velká celá čísla, o kterých jsem tady dal řeč.citovat
#029539
avatar
Lubo má s typem Currency pravdu. Zde je definice typu Currency z nápovědy:
Currency variables are stored as 64-bit (8-byte) numbers in an integer format, scaled by 10,000 to give a fixed-point number with 15 digits to the left of the decimal point and 4 digits to the right. This representation provides a range of -922,337,203,685,477.5808 to 922,337,203,685,477.5807. The type-declaration character for Currency is the at sign (@).
The Currency data type is useful for calculations involving money and for fixed-point calculations in which accuracy is particularly important.
Tohle nebudu překládat! Je to plná odpověď na mé výhrady vůči VBA v Excelu, jemuž se tímto omlouvám! 1citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Vynásobit hodnoty kurzem - Power Query

Alfan • 26.4. 7:56

Relativní cesta - zdroje Power Query

Alfan • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

elninoslov • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

lubo • 25.4. 19:18

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 15:12

Relativní cesta - zdroje Power Query

Alfan • 25.4. 15:08

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 14:21