Unity/c# Zahlen eines Strings miteinander vergleichen?
Hallo,
Und zwar habe ich in meinen Player prefs jetzt einen string ("time") welcher Zahlen hat die ungefähr so ausgebaut sind: 0:0,00 oder so ähnlich und ich hätte gerne das das höher gespeichert werden soll heißt wenn ich einen Highscore von 3:0,32 habe soll der nächste wert nur gespeichert werden wenn er höher ist, bei einen Int wäre das sehr leicht wie geht das aber bei einem String?
Vielen Dank im voraus
4 Antworten
Ich weiß nicht, wie genau der string aufgeteilt ist, aber wenn ich das richtig verstehe, könnte man es so machen:
string[] numbers = deinString.Split(":");
if(Convert.ToDouble(numbers[0]) > Convert.ToDouble(oldNumber[0]))
if(Convert.ToDouble(numbers[2]) > Convert.ToDouble(oldNumber[1]))
Zahlen in Strings können nicht verglichen werden, du musst sie dazu in Integer umwandeln. Vielleicht machst du einen Double um die Zeit in einer einzigen Variable als Sekundenangabe vergleichen zu können...
Spreichere einfach nicht den String sondern ein Int in der kleinsten Einheit, z.B. Sekunden oder Millisekunden. Soetwas nennt man Timestamp. Die Zeit muss ja irgendwo herkommen, DateTime, Timespan? Da gibt es Parameter wie z.B. TimeSpan.Milliseconds. Vielleicht kansnt du den Timespan auch direkt serialisieren.
In Unity wandelst du den Int dann in einen formatierten String um, so wie du ihn haben möchtest. Speichere immer die Daten die dein Programm benötigt, nicht die, die der User benötigt um sie zu verstehen.
Der Computer arbeitet mit Bits - das heißt Nullen und Einsen - und damit sind Strings auch irgendwo nur Zahlen. Jetzt hat man sich verschiedenste Codierungen ausgedacht, also Wege, um Buchstaben und Zahlen mit Hilfe von Bits darzustellen. Zum Beispiel ist dir vielleicht Unicode ein Begriff. Falls du für deinen String oder falls C# standardmäßig Unicode als Codierung verwendet, dann kannst du in der entsprechenden Tabelle im Internet nachschlagen, welche Bit-Reihenfolge die verschiedenen Buchstaben und Zahlen haben. So ist es bei der 1 beispielsweise 00110001, was als Dezimalzahl 49 ist. Die 2 wird analog mit Hilfe der 50 im Speicher dargestellt usw. Du könntest also den entsprechenden Buchstaben bzw. die Zahl im String in Bytes konvertieren (Convert.ToByte ist anscheinend die geeignete Funktion) und von diesen Bytes 48 abziehen, um auf die gewünschte Ganzzahl zu kommen.
Das ist leider allgemein formuliert, weil ich mich nicht mit C# auskenne. Ansonsten scheint das Folgende einer Lösung deines Problems konkreter nachzukommen: https://stackoverflow.com/questions/36369735/how-to-convert-a-string-to-bits-in-c-sharp