Jak mogę poprawić moją metodę, która obecnie konwertuje bajty do megabite do tego formularza podwójnego 90979.32

To jest mój kod:

 Public Function BytesToMegabytes(Bytes As Double) As Double
        'This function gives an estimate to two decimal
        'places.  For a more precise answer, format to
        'more decimal places or just return dblAns

        Dim dblAns As Double
        dblAns = (Bytes / 1024) / 1024
        BytesToMegabytes = Format(dblAns, "###,###,##0.00")

    End Function

W końcu potrzebuję ciąg w formacie: 90979'32. Więc potrzebuję, aby był pojedynczą qoute w formacie zamiast kropki dziesiętnej. Jak mogę to zrobić? Dziękuję wszystkim za pomoc!

0
Mara 16 styczeń 2020, 18:09

1 odpowiedź

Najlepsza odpowiedź

Liczba ma tylko w ten sposób format, gdy zostanie przedstawiony użytkownikowi jako łańcuch. Do tego czasu jest to tylko liczba.

Metoda {X0}} może wziąć parametr, który informuje o tym, która kultura używa do formatowania.

Możemy skorzystać z tego, używając istniejącej kultury i modyfikując ją do użycia apostrofu jako separatora dziesiętnego:

Option Strict On

Imports System.Globalization

Module Module1

    Public Function BytesToMegabytes(Bytes As Long) As String
        'This function gives an estimate to two decimal
        'places.  For a more precise answer, format to
        'more decimal places or just return dblAns

        Dim dblAns As Double = (Bytes / 1024) / 1024

        Dim ci = New CultureInfo("en-GB")
        ci.NumberFormat.NumberDecimalSeparator = "'"

        Return dblAns.ToString("###,###,##0.00", ci)

    End Function

    Sub Main()

        Console.WriteLine(BytesToMegabytes(123445568999))

        Console.ReadLine()

    End Sub

End Module

Wyjścia:

117 726'87.

Prawdopodobnie znasz kod kultury, którego chcesz użyć, więc jeśli użyłeś tego zamiast "EN-GB", nie byłoby konieczności ustawienia NumberDeCimalseparator.

Jeśli nie chcesz przecinków do grupowania numerów, dodaj

ci.NumberFormat.NumberGroupSeparator = ""

Zauważ, że typ Long jest prawdopodobnie lepszy, jeśli masz do czynienia z bajtów. Typ zwracanej wartości z funkcji musi być taki sam jak w deklaracji: za pomocą Option Strict On pomoże Tak z takimi rzeczami i powinieneś ustawić go jako domyślne dla nowych projektów VB.NET.


REF: NumberformatInfo Class

3
Andrew Morton 22 styczeń 2020, 11:15