Math.Round - Wieso geht das nicht ...

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Math.Round - Wieso geht das nicht ...

    Hallo

    Ich bekomme es einfach nicht hin, meine bereits runtergeladenen Bytes des WebCientes auf "MB" zu runden mit Math.Round ..
    Ich habe schon einiges ausprobiert, aber nichts funktioniert, und jetzt bin ich wieder am Anfang ..

    VB.NET-Quellcode

    1. Me.Label1.Text = Math.Round(e.BytesReceived, 10) & " MB / " & Math.Round(e.TotalBytesToReceive, 10) & " MB bereits runtergeladen"


    Egal was ich mi Math.Round mache, es steht entweder immer noch "8301056"-Bytes oder irgendetwas mit -1, -2-, -66 was auch immer ..

    Wie bekomme ich das gerundet? ?(
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Hi
    schau' dir einfach mal das an: [VB.NET] Dateigröße formatieren
    Gerundet wird afaik nur auf Nachkommastellen? Besser ist es übrigens, Double.ToString("0.00") oder sowas zu verwenden, da Double ungenau ist und Round auf 2 Nachkommastellen nicht zwangsweise zu 2 Nachkommastellen führt.

    Edit: übrigens wär's geschickter, einen Timer o.ä. zu verwenden, um das Label nach-und-nach (z.B. im 0.5-Sekunden-Intervall) zu updaten satt fortschreitend.

    Gruß
    ~blaze~
    Du hast 154 Beiträge und noch nix von Option Strict On gehört? Ein Label.Text ist ein String. Keine Zahl!

    [VB 2008] Kb, Mb oder Gb nach Bytes umwandeln
    #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 :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    @sonne75

    Doch, das ist sogar Option Strict ON konform. Der "&"-Operator übernimmt hier den Aufruf von ToString(). Ist irritierend, aber leider korrekt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Option Strict On ist aber drin, und eine Fehlermeldung bekomme ich nicht.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Net
    3. Imports System.IO
    4. Public Class Form1
    5. Dim HV1 As Boolean = 0
    6. Private WithEvents WebClient As New Net.WebClient
    7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    8. WebClient = New WebClient
    9. HV1 = CBool(1)
    10. WebClient.DownloadFileAsync(New Uri("(Link)"), ".\Datei.exe")
    11. End Sub
    12. Private Sub WebClient_DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs) Handles WebClient.DownloadProgressChanged
    13. Me.Label1.Text = Math.Round(e.BytesReceived, 2) & " / " & Math.Round(e.TotalBytesToReceive, 2) & " bereits runtergeladen"
    14. Me.ProgressBar1.Value = e.ProgressPercentage
    15. End Sub
    16. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    17. If CInt(HV1) = 0 Then
    18. Me.WebClient.CancelAsync()
    19. MessageBox.Show("Download noch nicht gestartet.", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
    20. Else
    21. Me.WebClient.CancelAsync()
    22. MessageBox.Show("Runterladen der Dateien abgebrochen.", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
    23. End If
    24. End Sub
    25. End Class
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    @ErfinderDesRades
    Stimmt, Fehler meinerseits, aber ich möchte es auf MB gerundet haben, also die Restlichen Zahlen dahinter sollen verschwinden.

    SpaceyX schrieb:

    Sag uns mal, was in Deiner Auffassung runden bedeutet. Du möchtest Bytes in MB umrechnen, richtig?

    Genau.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Dann verwende nicht runden, wenn Du etwas umrechnen willst ^^ Du bist lustig.

    1024 Byte sind ein KiloByte, 1024 KiloByte sind 1 Megabyte.

    Das solltest Du nun aber alleine schaffen, oder?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Funktioniert soweit, jetzt muss ich nur noch diese lange Zahl danach wegbekommen. (Zeigt mir was an mit 1.795515512135)

    VB.NET-Quellcode

    1. Me.Label1.Text = e.BytesReceived / 1024 / 1024 & " / " & e.TotalBytesToReceive / 1024 / 1024 & " bereits runtergeladen"
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Nun darfst du das tun was du anfangs wolltest. Runde auf 2 Stellen oder so viele wie du halt möchtest... :)
    #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. ToString("..")


    übernimmt als Parameter Formatangaben als String. Da gibts auch Formatangaben, die Dir die Zahl auf 2, 3, 4, x Nachkommastellen runden. Danach suchst Du jetzt mal. Alternativ kannst Du nun hier Math.Round anwenden.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Der zeigt mir jetzt "1 / 8 ... bereits runtergeladen" an :huh:

    VB.NET-Quellcode

    1. Me.Label1.Text = Math.Round(e.BytesReceived / 1024 / 1024, 2) & " / " & Math.Round(e.TotalBytesToReceive / 1024 / 1024, 2) & " bereits runtergeladen"

    Ich blicke das grade nicht so ganz.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Rechne alles erst in einer Variable aus und runde dann erst... Sonst kann es zu Fehlern kommen, wegen der Reihenfolge etc.
    (Sorry kein Integer, mein Fehler)
    #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 :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()