Wie kürze ich eine MB Anzeige bei einem Download (z.B. 7,30419921875 MB in 7,30 MB)?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von beaR.

    Wie kürze ich eine MB Anzeige bei einem Download (z.B. 7,30419921875 MB in 7,30 MB)?

    Hallo Leute,
    ich möchte in meinem "Downloader" die Anzeige der schon gedownloadeten Bytes in MB darstellen.

    Dies habe ich erledigt, was auch nicht das große Problem war.
    Jetzt habe ich aber das Problem, dass die MB nicht in z.B. 7,30 MB angezeigt werden, sondern in 7,30419921875 MB.

    Nun die Frage, wie realisiere ich, dass die MB im "Kurzformat" angezeigt wird?

    Meinen Code:

    Quellcode

    1. ​Private Sub ProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
    2. Dim Totalbytes As Double
    3. Dim bytes As Double
    4. Totalbytes = e.TotalBytesToReceive
    5. bytes = e.BytesReceived
    6. Me.lbfortschritt.Text = (bytes / 1024 / 1024) & " MB von " & (Totalbytes / 1024 / 1024) & " MB"
    7. Label1.Text = String.Format("Insgesamt: {0}%", e.ProgressPercentage)
    8. ProgressBar1.Value = e.ProgressPercentage
    9. End Sub


    LG -beaR
    Schau Dir mal ​Math.Round an.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    VB.NET-Quellcode

    1. Private Shared Function BytesToString(byteCount As Long) As String
    2. Dim suf As String() = {"B", "KiB", "MiB", "GiB", "TiB", "PiB", _
    3. "EiB"}
    4. 'Longs run out around EB
    5. If byteCount = 0 Then
    6. Return "0" & suf(0)
    7. End If
    8. Dim bytes As Long = Math.Abs(byteCount)
    9. Dim place As Integer = System.Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024)))
    10. Dim num As Double = Math.Round(bytes / Math.Pow(1024, place), 1)
    11. Return (Math.Sign(byteCount) * num).ToString(CultureInfo.CurrentCulture) & " " & suf(place)
    12. End Function


    Dieser Code nimmt dann immer die größtmögliche Einheit. Also würden dann nicht irgendwann 5000 MiB angezeigt werden, sondern 4 GiB. Eignet sich für einen Downloader wohl besser.
    Mfg
    Vincent

    Schau Dir halt die Funktion im Genauen mal an und was sie zurückgibt etc.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Mann kann Größenangaben auch durch Windows formatieren lassen: StrFormatByteSize
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.