Zaokrouhlování na řády, příp. počet des.míst   otázka

VB.NET

Dobrý den,

prosím neporadil by někdo jestli je možné pomocí nějaké funkce nebo třídy zaokrouhlovat dle určitých vlastních pravidel:

- zaokrouhlovat na určitý počet desetinných míst, ale vždy směrem dolů

- nebo zaokrouhlovat na např. desítky, stovky atd.

Mám proměnou kterou potřebuji zaokrouhlovat podle její vlastnosti - 'minimální přírůstek hodnoty'.

Pátral jsem jak na to, ale marně. Jde mi o to jestli si to mám rovnou ošetřit nějakou vlastní funkcí nebo je již toto v .NETu nějak řešeno.

Předem díky za info

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Třída Math

Zaoukrohlování Math.Round

Public Class Form1

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim cislo As Double = 1257.3654532657
    Dim zaokrouhleno As Double
    For i = 9 To 0 Step -1
      zaokrouhleno = Math.Round(cislo, i)
      Debug.Print(zaokrouhleno)
    Next
    ' vrátí
    '1257,365453266
    '1257,36545327
    '1257,3654533
    '1257,365453
    '1257,36545
    '1257,3655
    '1257,365
    '1257,37
    '1257,4
    '1257

  End Sub
End Class

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Díky za info, ale Math.Round neumí zaokrouhlovat vždy směrem dolů. Pouze lze vybrat jestli nahoru nebo dolů v případě třeba 3,5

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže první krok jsem vyřešil a to jak zaokrouhlovat vždy dolů (respektive je oddělit přebytečná des.místa):

Function Format(ByVal value As Double, ByVal decPl As Integer)

        Dim result As Double = Math.Floor((value * (10 ^ decPl)) * (10 ^ decPl))

        Return result

    End Function

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pardon chybička

 Dim result As Double = Math.Floor((value * (10 ^ decPl)) / (10 ^ decPl))

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pořád chybička - vynásobíte, vydělíte, odříznete desetinná místa - vždy dostanete celé číslo bez des. míst

 '  Dim result As Double = Math.Floor((value * (10 ^ decPl)) / (10 ^ decPl))
 Dim result As Double = Math.Floor(value * (10 ^ decPl)) / (10 ^ decPl)
 ' jasnější to bude asi takhle - mocnina má přednost 
 ' nejprve vynásobit, odříznout a teprve potom dělit
 ' Dim result As Double = Math.Floor(value * 10 ^ decPl) / 10 ^ decPl

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Když chcete zaokrouhlovat na stovky, nemáte to nejprve vydělit, a pak vynásobit? To bude možná ten problém, ne?

156,7 vydělím 100, mám 1,567, zaokrouhlím dolů, mám 1, vynásobím 100 a mám 100.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bude-li druhý parametr pro počet des. míst záporný, funkce provede, co se od ní čeká.

 Debug.Print Math.Floor(156.7 * (10 ^ -2)) / (10 ^ -2)  ' vrátí 100

Píšete "zaokrouhlím dolů", to VB.NET dovede?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback