Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

1

28.11.2005, 15:30

Float nach int in VB und C#

Hi,

C#

C-/C++-Quelltext

1
2
3
4
float test1 = 2001.99f;
Convert.ToInt32(test1);
---
Ergebniss: 2002


VisualBasic

C-/C++-Quelltext

1
2
3
4
Dim test1 = 2001.99;
Int(test1);
---
Ergebniss: 2001


Die große Frage: WARUM?

@Patrick
ja ich weiß int = ganz böse ;)
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

28.11.2005, 15:40

C# rundet eben auf bzw ab, Vb nicht, weil Basic eben dumm ist ^^.

Sowas ist eigentlich immer Funktionspeziefisch.

Anonymous

unregistriert

3

28.11.2005, 15:49

Kommt auf die Funktionsinterpretation an:

koschka

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

int main (void)
{
    float x = 3.999999f;
    unsigned long y = static_cast<unsigned long>(x);

    std::cout << y;

    std::cin.get();
    return 0;
}
Dann ist C++ ja auch "dumm"?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

4

28.11.2005, 15:52

war ja auch nur so eine Floskel ^^.

Anonymous

unregistriert

5

28.11.2005, 15:56

bassdscho
Ich weiß nicht was sich die Entwickler von C# da gedacht haben, denn für sowas gibt es Rundungsfunktionen. Evtl. steht da mehr drüber in der Doku wie man die Nachkommastellen "abschneiden" kann. Ansonsten fällt mir nur eine möglichkeit ein:

Float in einen String konvertieren, alles was hinter dem Punkt ist abschneiden und den Rest in einen Int konvertieren.

Gibt sicherlich viele andere, aber ich kenn mich mit C# nicht so aus.

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

6

28.11.2005, 18:22

so gehts, wo bei mir nicht ganz klar ist was da soviel anders ist.

C-/C++-Quelltext

1
2
3
float test1 = 2001.99f;
test1 = (int)(test1 * 100.0f)
test1 = test1 / 100.0f;
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

7

28.11.2005, 18:28

um die Nachkommastellen weg zu bekommen:
einfach einen normalen int-Cast machen

C-/C++-Quelltext

1
2
float x = 2001.99f;
int i = (int)x; //i hat dann 2001

mfg Philipp

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

28.11.2005, 18:30

Dein Beispiel funzt aber nur für kommazahlen mit weniger als 3 Nachkommastellen. Du kickst erstmal die Kommastellen durch das multiplizieren, dann boxed(da ja c#....) du das ganze zu einen int und wenn du den wieder teilst, werden die kommastellen vernachlässig.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

9

28.11.2005, 20:14

C#

C-/C++-Quelltext

1
2
3
4
5
6
7
8
float x = 2.93645254f;
float y = 2.34244234f;
float z = 2.5f;
int a = (int)x; // <-- 2,  nachkommastellen werden abgeschnitten


Convert.ToInt32(x); // <-- 3, rundet zur näherliegenden zahl

Convert.ToInt32(y); // <-- 2

Convert.ToInt32(z); // <-- 2, bei x.5 wird die gerade wiedergegeben

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

10

28.11.2005, 21:02

darauf bin ich gar nicht gekommen das die funktion rundet, weil bei allen meinen zahlen das so war.
ich hab gedacht ich hab irgendwas falsch gemacht

*bling* da geht mir doch ein licht auf
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Werbeanzeige