Vážený kolego, bohužel z Vašeho popisu si nejsem opět zcela jist, zdali chápu Vaše želanie, proto jsem zkusil postihnout všechny možnosti. Nejprve tedy, jaké možnosti mne napadly: 1) Potřebujete zaokrouhlovat na konkrétní řád čísla, tedy ve Vašem případě třeba na stovky (pokud tedy si vyložím požadavek, že chcete mít "poslední dvě čísta výsledku celé" tak, že chcete, aby na těchto posledních dvou místech byly nuly. Bohužel to, co napsal Tomáš Vám asi dostačovat nebude, protože na rozdíl od např. excelu, kde tato funkce dokáže zaokrouhlovat i na pozice vlevo od desetinné čárky (při druhém parametru záporném), VisualBasic to umí jenom doprava - vyžaduje kladné číslo. 2) Nebo chcete zaokrouhlovat na konkrétní počet platných číslic. Jak jsem z textu pochopil, jde Vám o reálnou situaci s konkrétní "fyzikální" podstatou. No a tady se spíše využije zaokrouhlení na počet platných číslic (pokud na tu svou frézku hodíte místo plátkové korunky nějaký velký vrták, budete potřebovat výrazně nižší otáčky a při otáčkách kolem 100-vky by Vám asi už zaokrouhlení na "poslední 2 místa nulová" nevyhovovalo). Takže ať jste měl na mysli kteroukoliv variantu, zkuste něco takového (vypadá to velké, ale když vyhážete ty komentáře, tak je to jen pár řádků kódu):
''' <summary>
''' Funkce zaokrouhluje vstupní číslo na požadovaný řád, resp. požadovaný
''' počet platných číslic
''' </summary>
''' <param name="cislo">číslo (double), které chceme zaokrouhlit.</param>
''' <param name="rad">V případě, že proměnná "platne" není zadána, nebo je její hodnota False
''' udává řád, na který chceme číslo zaokrouhlit (kladná čísla udávají počet desetinných míst,
''' záporná počet nul nalevo od desetinné čárky.
''' V případě, že je proměnná platne=true, udává požadovaný počet platných číslic</param>
''' <param name="platne">Přepínač typu zaokrouhlení: False, nebo nezadáno - zaokrouhluje se na řád čísla,
''' True - zaokrouhluje se na počet platných číslic</param>
''' <returns>Formátovaný řetězec (string) v požadovaném zaokrouhlení</returns>
''' <remarks></remarks>
Private Function zaokrouhli(ByVal cislo As Double, ByVal rad As Integer, Optional ByVal platne As Boolean = False) As String
' hodnota, která se bude vracet v případě, že nebude prováděn výpočet
zaokrouhli = "0"
' pomocná proměnná pro ošetření manipulace se zápornými čísly
Dim znamenko As Integer = 1
' pokud je číslo=0, vrátíme defaultní řetězec "0"
If cislo = 0 Then Return zaokrouhli
' pokud je číslo < 0, převedeme je na kladné a do pomocné proměnné si poznačíme,
' že je zapotřebí znaménko opět vrátit na záporné (obejdeme tím problémy s log(záporného čísla)
If cislo < 0 Then
cislo *= -1
znamenko = -1
End If
' pokud je požadováno zaokrouhlení na počet platných číslic
If platne Then
' zkontrolujeme, není-li zadán nesmyslný počet platných číslic
If rad < 1 Then Return zaokrouhli
' zjistíme řád čísla (pozici první platné číslice zleva) a přepočítáme proměnnou rad
' tak, abychom převedli výpočet na zaokrouhlování dle řádu
rad = rad - Math.Floor(Math.Log10(cislo)) - 1
End If
' provedeme vlastní zaokrouhlení (na výsledek aplikujeme pomocnou proměnnou znaménko, čímž změníme
' číslo opět na záporné, pokud jsme tak učinili na začátku)
Return Format(znamenko * Math.Round(cislo * Math.Pow(10, rad)) / Math.Pow(10, rad), "#,##0.###")
End Function
Samozřejmě je to možno výrazně zjednodušit (pokud si přejete jen jeden ze způsobů zaokrouhlování, ale s tím si jistě již poradíte sám. A použití je stejně jednoduché, pokud chcete zaokrouhlit na stovky (tzn. aby byly první 2 číslice vlevo od desetinné čárky rovny 0), pak jednoduše napiště:
tb_otackyFrezovanie.text=zaokrouhli(otacky,-2)
a pokud chcete zaokrouhlovat třeba na 3 platné číslice, tedy 12356,58 -> 12 400 123,5658 -> 124 1,235658 -> 1,24 atd., pak jednoduše napište
tb_otackyFrezovanie.text=zaokrouhli(otacky,3,true)
|