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

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

11

05.09.2012, 12:35

Ich komme jetzt zwar stark vom Thema ab, aber hat jemand hierfür vielleicht eine bessere Lösung:

Für eine Berechnung (in einer Consolenanwendung) möchte ich eine Kommazahl einlesen.
Das klappt aber irgendwie nicht, deswegen habe ich mir folgendes überlegt:

double dEingabe = Convert.ToDouble(Console.ReadLine().Replace(",", ""))/100;


Diese Lösung funktioniert aber nur bei Eingaben in dem Format "1,23", produziert hingegen bei mehreren Nachkommastellen in der Eingabe logischerweise falsche Werte.

Gibt es da vielleicht eine einfache Methode Kommazahlen (mit mehreren Nachkommastellen) einzulesen?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

12

05.09.2012, 12:37

Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

13

05.09.2012, 12:49

@ MitgliedXYZ: Schaue dir das OpenBook von Galilio Computing an, welches in diesem Thread bereits gepostet worden ist. Dort werden dir vermutlich fast alle Fragen beantwortet, die dir anfänglich aufkommen sollten. Dafür reicht es, wenn du die Grundlagen liest :)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

14

05.09.2012, 13:26

@Saculdur: In der Regel wirst du mit structs auf Containern Probleme haben. Mal ein einfaches Beispiel (PlayerStruct ist eine Struktur)

C#-Quelltext

1
2
3
4
5
6
7
8
List<PlayerStruct> players = new List<PlayerStruct>();

/* wird gefüllt....*/

foreach(PlayerStruct player in players)
{
    player.Health = 100;
}



Das ganze würde nicht, wie erwartet, für jeden Spieler in der Liste die Gesundheit auf hundert setzen. Struct ist ein Valuetype und es wird dadurch beim durchiterieren eine Kopie erzeugt! Daher solltest du, wie BlueCobolt schon erwähnte, sie als reine Datenstruktur verwenden.


ja, das ist ein durchaus konsequentes Verhalten, sofern man eine Foreach Schleife verwendet und nicht direkt auf die Elemente des Arrays zugreift
allerdings frage ich mich, warum du dich damit an mich wendest - ich hatte Anfangs zu Klassen geraten ;)

@MitgliedXYZ:
das Problem bei deiner Ermittlung ist:
du entfernst einfach das Komma und gehst danach davon aus, dass es 2 Nachkommastellen gegeben hat
außerdem verwendet die Conver.ToDouble (und auch die Double.Parse Methode) das englische Format für Zahlen - "." statt ","
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

05.09.2012, 13:36

außerdem verwendet die Conver.ToDouble (und auch die Double.Parse Methode) das englische Format für Zahlen - "." statt ","

Das stimmt nicht.
Das hängt von der Spracheinstellung des Systems ab.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

05.09.2012, 13:38

Jup. Deswegen hatte ich auch den Link zur Parse-Methode mit Provider angegeben, damit er da einen raussuchen oder festlegen kann.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

17

05.09.2012, 13:53

außerdem verwendet die Conver.ToDouble (und auch die Double.Parse Methode) das englische Format für Zahlen - "." statt ","

Das stimmt nicht.
Das hängt von der Spracheinstellung des Systems ab.

Jup. Deswegen hatte ich auch den Link zur Parse-Methode mit Provider angegeben, damit er da einen raussuchen oder festlegen kann.

ok, das war dann wohl doch eher Wunschdenken meinerseits... =/
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

05.09.2012, 14:04

Mich nervt das ziemlich (ich will, dass mein Programm sich immer gleich verhält), darum habe ich oft schon folgendes benutzt:

C#-Quelltext

1
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

05.09.2012, 14:54

Hehe, sehr gute Idee, mir geht solcher Quatsch nämlich auch auf den Zeiger. Vor allem, weil man Dateien zum Datenaustausch oder Speichern von Einstellungen/Daten ohnehin auf jedem System gleich hat und die dann auch überall gleich interpretieren muss.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

20

05.09.2012, 15:32

Wenn man eh selbst schreibt und liest, kann man dafür auch einfach CultureInfo.InvariantCulture verwenden :). Genau für den Fall ist es auch gedacht!

Werbeanzeige