Format: Nachkommastellen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Format: Nachkommastellen

    Hallo Zusammen:

    folgendes Problem:

    Ich stelle einen Wert aus der S7 via DLL in der Visualisierung in einem reinen Ausgabefeld dar (Textbox, readonly)
    Beispiel:

    ReadS7RealText(1368, .tbDrehmoment.Text) => Stelle den Wert der Adresse 1368 in der Textbox "Drehmoment" dar


    Das klappt soweit auch sehr gut. Nun will ich den angezeigten Wert aber nur mit zwei Nachkommastellen darstellen. Gibt es da keine Möglichkeit über die Objekteigenschaften der Textbox?!


    Da ich in den Eigenschaften nichts gefunden habe, habe ich es im Programmcode wie folgt versucht:

    frmHandbetrieb.tbDrehmoment.Text = Format(ReadS7RealText(1368, .tbDrehmoment), "0,00")

    Klappt aber nicht und habe mangels Erfahrung mit VB keine Ideen mehr...

    Danke im Voraus für die Hilfe!
    Schau Dir die Überladungen der ToString-Methoden genauer an. Hier ein paar Beispiele zum Vergleichen:

    VB.NET-Quellcode

    1. Dim wert As Double = 123242.12312234452
    2. Debug.WriteLine("Wert: " & wert.ToString)
    3. Debug.WriteLine("Zwei Nachkomma-Stellen: " & wert.ToString("0.00"))
    4. Debug.WriteLine("Zwei Nachkomma-Stellen, inkl. Tausender-Trennzeichen: " & wert.ToString("N2"))
    Habe es mal so ausprobiert:
    ReadS7RealText(1368, .tbDrehmoment.Text)
    .tbTemperatur.Text = .tbTemperatur.Text.ToString("0,00") => klappt aber wieder nicht...

    und dann:

    ReadS7RealText(1372, .tbTemperatur.ToString("0,00"))

    Beim letzteren bekomme ich beim Debuggen weder Fehler noch Warnungen, aber in der Visu schreibt er jetzt gar keine Werte mehr in die Textbox...

    Bitte:
    msdn.microsoft.com/de-de/library/system.double.tostring.aspx
    Von MSDN:

    VB.NET-Quellcode

    1. Dim numbers() As Double = {1054.32179, -195489100.8377, 1.0437E21, _
    2. -1.0573e-05}
    3. Dim specifiers() As String = { "C", "E", "e", "F", "G", "N", "P", _
    4. "R", "#,000.000", "0.###E-000", _
    5. "000,000,000,000.00###" }
    6. For Each number As Double In numbers
    7. Console.WriteLine("Formatting of {0}:", number)
    8. For Each specifier As String In specifiers
    9. Console.WriteLine(" {0,5}: {1}", _
    10. specifier, number.ToString(specifier))
    11. Next
    12. Console.WriteLine()
    13. Next
    14. ' The example displays the following output to the console:
    15. ' Formatting of 1054.32179:
    16. ' C: $1,054.32
    17. ' E: 1.054322E+003
    18. ' e: 1.054322e+003
    19. ' F: 1054.32
    20. ' G: 1054.32179
    21. ' N: 1,054.32
    22. ' P: 105,432.18 %
    23. ' R: 1054.32179
    24. ' #,000.000: 1,054.322
    25. ' 0.###E-000: 1.054E003
    26. ' 000,000,000,000.00###: 000,000,001,054.322
    27. '
    28. ' Formatting of -195489100.8377:
    29. ' C: ($195,489,100.84)
    30. ' E: -1.954891E+008
    31. ' e: -1.954891e+008
    32. ' F: -195489100.84
    33. ' G: -195489100.8377
    34. ' N: -195,489,100.84
    35. ' P: -19,548,910,083.77 %
    36. ' R: -195489100.8377
    37. ' #,000.000: -195,489,100.838
    38. ' 0.###E-000: -1.955E008
    39. ' 000,000,000,000.00###: -000,195,489,100.00
    40. '
    41. ' Formatting of 1.0437E+21:
    42. ' C: $1,043,700,000,000,000,000,000.00
    43. ' E: 1.043700E+021
    44. ' e: 1.043700e+021
    45. ' F: 1043700000000000000000.00
    46. ' G: 1.0437E+21
    47. ' N: 1,043,700,000,000,000,000,000.00
    48. ' P: 104,370,000,000,000,000,000,000.00 %
    49. ' R: 1.0437E+21
    50. ' #,000.000: 1,043,700,000,000,000,000,000.000
    51. ' 0.###E-000: 1.044E021
    52. ' 000,000,000,000.00###: 1,043,700,000,000,000,000,000.00
    53. '
    54. ' Formatting of -1.0573E-05:
    55. ' C: $0.00
    56. ' E: -1.057300E-005
    57. ' e: -1.057300e-005
    58. ' F: 0.00
    59. ' G: -1.0573E-05
    60. ' N: 0.00
    61. ' P: 0.00 %
    62. ' R: -1.0573E-05
    63. ' #,000.000: 000.000
    64. ' 0.###E-000: -1.057E-005
    65. ' 000,000,000,000.00###: -000,000,000,000.00001

    Steht alles was du brauchst ( nämlich "F" ) oder:
    msdn.microsoft.com/de-de/library/dwhawy9k.aspx

    vb-beginner schrieb:

    Habe es mal so ausprobiert:
    ReadS7RealText(1368, .tbDrehmoment.Text)
    .tbTemperatur.Text = .tbTemperatur.Text.ToString("0,00") => klappt aber wieder nicht...

    und dann:

    ReadS7RealText(1372, .tbTemperatur.ToString("0,00"))

    Beim letzteren bekomme ich beim Debuggen weder Fehler noch Warnungen, aber in der Visu schreibt er jetzt gar keine Werte mehr in die Textbox...


    Du benutzt ja auch Kommata. Das müssen aber Punkte sein

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    also habe jetzt wie folgt probiert:
    ReadS7RealText(1372, .tbTemperatur.Text)

    .tbTemperatur.Text = .tbTemperatur.Text.ToString("0.00")

    Dann bekomme ich aber eine Warnung das beim Konvertieren von "String" in "System.IFormatProvider" Laufzeitfehler auftreten können.

    Versuche jetzt mal Devils Variante...
    einen String kann man nicht sinnvoll formatieren. Formatieren bedeutet, dass man eine Zahl (oder sonstwas) in einen String umwandelt. Wenns schon ein String ist, isses zu spät.

    also ändere deine RS7Read - Funktion so, dass sie einen Double zurückgibt, den man dann auch formatieren kann.
    Und dann kann man z.B. folgenden Konstrukt verwensden:

    VB.NET-Quellcode

    1. Dim txt As String
    2. txt = String.Format("{0}, {1}", a, b) ' {0} - 1. Argument, {1} - 2. Argument
    3. txt = String.Format("{0:0.000}, {1:0.0}", a, b) ' {0:0.000} - 1. Argument formatiert, {1:0.0} - 2. Argument formatiert
    usw.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!