Frage an string, type-conversion, floating-point, c#, .net – Konvertieren von Zeichenfolgen in Float in C #

81

Ich konvertiere eine Zeichenfolge wie "41.00027357629127" und verwende;

Convert.ToSingle("41.00027357629127");

oder

float.Parse("41.00027357629127");

Diese Methoden kehren zurück4.10002732E + 15.

Wenn ich in Float konvertiere, möchte ich "41.00027357629127". Diese Zeichenfolge sollte identisch sein ...

Woher wissen Sie, in was konvertiert wird - so zeigen Sie die Nummer an Mark
41.00027357629127 darf in wissenschaftlicher Notation nicht 4.10002732E + 15 sein, es sei denn, Ihre Kultur verwendet natürlich ein Dezimalkomma anstelle des Dezimalpunkts (und einen Punkt als Tausendertrennzeichen), sodass die Zahl tatsächlich lautet: 4100027357629127 wird folglich als 4.10002732E + 15 angezeigt ljgww
Irgendeine Idee, warum es ToSingle ist? Und nicht ToFloat? R2D2

Deine Antwort

7   die antwort
21

Erstens ist es nur einePräsentation desfloat Nummer, die Sie im Debugger sehen. Dasecht Der Wert ist ungefähr genau (so viel wie möglich).

Hinweis: Verwenden Sieimmer CultureInfo Informationen zum Umgang mit Gleitkommazahlen im Vergleich zu Zeichenfolgen.

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

Dies ist nur ein Beispiel. Wählen Sie eine geeignete Kultur für Ihren Fall.

Wie kann ich meine CultureInfo auswählen? Ich bin in der Türkei, wo ich TR-TR hinzufügen werde? Mehmet
@ Mehmetnew System.Globalization.CultureInfo("tr-TR") sshow
0

um einen genaueren Wert zu erhalten.

7

Convert.ToDouble("41.00027357629127");

Convert.ToDouble Dokumentation

Ändert dies nicht den Datentyp von float zu double? OP wollte schweben. Coding hierarchy
4

schweben ist 7-stellig. Wenn Sie das ganze Los behalten wollen, müssen Sie das verwendendoppelt Typ, der 15-16 Stellen behält. In Bezug auf die Formatierung, schauen Sie sich einen Beitrag überFormatierung verdoppelt sich. Und du musst dir Sorgen machenüber Dezimaltrennzeichen in C #.

Ich bin müde double.Parse es gibt 4100027357629127.0 es ist zu schade Mehmet
Das klingt wie das '.' Zeichen ist nicht das Dezimaltrennzeichen in Ihrem Gebietsschema? Auscheckenstackoverflow.com/questions/3870154/c-sharp-decimal-separator jpe
186

bei dem die Dezimalmarke "," anstelle von "." Lautet.

Versuchen Sie Folgendes:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

Beachten Sie jedoch, dass ein Float nicht so viele Stellen der Genauigkeit enthalten kann. Dazu müssten Sie double oder Decimal verwenden.

Vergessen Sie nicht, den Namespace hinzuzufügenusing System.Globalization; zugreifenCultureInfo Mobiletainment
10

float asd = (float) Convert.ToDouble("41.00027357629127");
Bitte geben Sie einen Kontext an, warum dies die richtige Antwort ist. Bas Peeters
1

double.Parse("41.00027357629127");

Ich bin müde, aber nicht Mehmet
Ich glaube nicht, dass er fragt, wie er es abrunden soll. O. R. Mapper

Verwandte Fragen