Oddeleni tisicu   otázka

VB.NET, Algoritmy

Zdarvím..

Potřebuji oddělit tisíce mezerou. Ve VB6 jsem si udělal funkci která tam funguje ale ve VStudio 2010 to nemůžu rozjet. Poraďte prosím co je špatně. Nefunguje ani Do loop until. S upraveným číslem se neprovádí výpočet, proto může být jako string

Private Function oddel(MyInteger)
        Dim n As Integer
        Dim cislo As String
        cislo = MyInteger
        If Len(MyInteger) < 7 And Len(MyInteger) > 3 Then
            Do
                n = n + 1
            Loop Until n + 3 = Len(MyInteger)
            cislo = Left(MyInteger, n) & " " & Mid(MyInteger, (n + 1))
        End If
        If Len(MyInteger) > 6 And Len(MyInteger) < 10 Then
            Do
                n = n + 1
            Loop Until n + 6 = Len(MyInteger)
            cislo = Left(MyInteger, n) & " " & Mid(MyInteger, (n + 1), 3) & " " & Right(MyInteger, 3)
        End If
        oddel = cislo
        n = 0
    End Function

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

Ve VB.NET se pro formátování používá tzv. globalizace.

Dim number = 12345
Dim formattedNumber = number.ToString("N0", My.Application.Culture)
'12 345

Metoda ToString s parametrem IFormatProvider zformátuje číslo přesně podle Místního nastavení v Ovládacích panelech. Tak je zajištěno, že ve všech kulturách se dané číslo zformátuje v souladu s formátem dané země.

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

Hezký večer,

také jeto možné provést následujícími možnostmi:

Dim number = 12345
Dim formattedNumber = number.ToString("###,###")
Dim formattedNumber2 = Format(number, "###,###")

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

Takhle v žádném případě ne!

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

Hezký večer pane Linhart!

A proč ne? Možná mám blbě seřízený systém, ale Vámi uváděný příklad u mně nefunguje!

Možná by to mělo být:

Dim number = 12345
Dim formattedNumber = number.ToString("#,###")
Dim formattedNumber2 = Format(number, "#,###")

což je funkční stejně jako mnou uvedený předchozí příklad.

Přeji hezký večer

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

Chybělo mi tam "N0" - specifikace číselného formátu s nula desetinnými místy. Vaše řešení je prasárna, protože je to používání vlastního formátování v situaci, kdy je to naprosto nevhodné.

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

Mě tohle nefunguje nebo netuším jak to použít. Zkouším to zakomponovat do funkce ale prostě nejde. Mužete mi to napsat jako funkci. S tím se mi bude lépe pracovat.

Error: Value of type 'System.Globalization.CultureInfo' cannot be converted to 'Integer'.

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

Hezký večer,

jak již jsem výše uvedl, mně to také nefunguje. Na Vaši žádost to uvádím jako funkci:

    Private Function oddel(MyValue As Long) As String
        Return MyValue.ToString("#,###")
    End Function

nebo

    Private Function oddel(MyValue As Long) As String
        Return Format(MyValue, "#,###")
    End Function

Pokud můj příspěvek nestačí, pak počkejte až dostanete fundovanější odpověď.

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

Super, tohle je přesně to co jsem potřeboval. Vše funguje jak má. Díky

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

Nepoužívejte to, radím vám dobře. To že něco funguje neznamená, že je to správně a použitelné...

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

No nic proti Vám pane Linharte, ale nemám důvod nepoužívat výše zmíněný zdroj. Pracoval jsem s tím celý víkend a vše fungovalo jak mělo. Naopak, ten Váš zdroj mi nefunguje.

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

Nefunguje, protože jste použil původní kód bez N0. Proč to nemáte používat jsem již psal. Jakmile se jednou naučíte hovadinu, kterou vám někdo nakukal jako v tomto případě, budete se toho zbavovat velmi těžko.

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

Skúste použiť funkciu "TriState"

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Label1.Text = FormatNumber(TextBox1.Text, 2, TriState.False)
    End Sub
End Class

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

Nechápem, veď to funguje. Nerozumel som otázke?

nahlásit spamnahlásit spam 1 / 1 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