Float zu Integer und umgekehrt

  • VB.NET
  • .NET (FX) 1.0–2.0

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

    Float zu Integer und umgekehrt

    Hallo



    Ich möchte gerne meinen Integer (1069547520) in Float (<- Single?) (1.5) umwandeln und umgekehrt, und mir die Zahl in einer MessageBox ausgeben lassen.

    Wie genau bekomme ich das genau so konvertiert? :)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

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

    Aus

    Vultrax schrieb:

    (1104936960)
    mach

    Vultrax schrieb:

    (1.5)
    :?:
    Mit welcher Rechenvorschrift?
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moin,

    ein Integer hat keine Nachkommastellen, sodass Dir ein Float auch nichts bringt.

    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 :!:
    Danke erstmal!

    ErfinderDesRades schrieb:

    dividieren durch 10.000.000
    Das ergibt aber einen Double.


    Ich habe durch eine Milliarden geteilt, damit ich das Komma direkt hinter der Eins habe.

    VB.NET-Quellcode

    1. Dim IntegerValue As Integer = 1069547520
    2. Dim FloatValue As Double = Math.Round(IntegerValue / 1000000000, 1)
    3. MessageBox.Show(FloatValue)


    Das Ergebnis ist allerdings 1,1.



    Mit der Methode von @~blaze~ funktioniert es, der Wert ist genau 1,5.


    ~blaze~ schrieb:

    Hi
    ist damit gemeint, dass die Daten konvertiert werden sollen? In C# wäre das über einen Zeiger einfach zu lösen, in VB.Net ginge das z.B. über BitConverter.ToSingle(BitConverter.GetBytes(integerWert), 0).

    Gruß
    ~blaze~


    VB.NET-Quellcode

    1. Dim IntegerValue As Integer = 1069547520
    2. Dim FloatValue As Double = BitConverter.ToSingle(BitConverter.GetBytes(IntegerValue), 0)
    3. MessageBox.Show(FloatValue)




    Die Frage wäre jetzt nur noch, wie ich die 1,5 wieder in einen Integer umwandeln kann.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Genau umgekehrt, logischerweise.

    VB.NET-Quellcode

    1. BitConverter.ToInt32(BitConverter.GetBytes(SingleValue), 0)


    BitConverter gibt die Bytes zurück, so, wie sie im Speicher stehen. Da Int32 (=Integer) und Single beide 32 Bits im Speicher belegen und Integer einfach als "4 Bytes" aufgefasst werden können, kannst du halt einfach hin-und-herkonvertieren. Theoretisch könntest du halt auch die genaue Repräsentation des Floats aus dem Integer herauslesen (1 Bit Vorzeichen, 23 Bit Mantisse, 8 Bit Exponent, wenn die Float-Darstellung 1,mantisse * 2^(exponent - 127) ist, oder irgendwie sowas)

    Gruß
    ~blaze~
    Huch, hatte es (so wie es aussah) genauso geschrieben, raus gekommen ist trotzdem immer 0. (Muss wohl ein Tippfehler gewesen sein ..)

    Danke für die Hilfe! :rolleyes: *dazugelernt*
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Vultrax schrieb:

    dazugelernt
    ohne das Problem präzise beschrieben zu haben. :rolleyes:
    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).
    Programmierfragen über PN / Konversation werden ignoriert!