Konvertieren von Zeichenfolgen in Float in C #


108

Ich konvertiere eine Zeichenfolge wie "41.00027357629127" und verwende;

Convert.ToSingle("41.00027357629127");

oder

float.Parse("41.00027357629127");

Diese Methoden geben 4.10002732E + 15 zurück .

Wenn ich in float konvertiere, möchte ich "41.00027357629127". Diese Zeichenfolge sollte dieselbe sein ...


1
Woher wissen Sie, in was es konvertiert wird - so zeigen Sie die Zahl an
mmmmmm

1
Irgendeine Idee, warum es ToSingle ist? Und nicht ToFloat?
Lord Darth Vader

41.00027357629127 darf in wissenschaftlicher Notation nicht 4.10002732E + 15 sein, es sei denn, Ihre Kultur verwendet natürlich ein Dezimalkomma anstelle eines Dezimalpunkts (und einen Punkt als Tausendertrennzeichen), sodass die Zahl tatsächlich lautet: 4100027357629127 wird folglich als 4.10002732E + 15
ljgww angezeigt

Antworten:


229

Das Gebietsschema Ihres Threads ist auf eins festgelegt, bei dem die Dezimalstelle "," anstelle von "." Ist.

Versuchen Sie Folgendes:

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

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


35
Vergessen Sie nicht, den Namespace using System.Globalization;für den Zugriff hinzuzufügenCultureInfo
Mobiletainment

24

Erstens ist es nur eine Darstellung der floatNummer, die Sie im Debugger sehen. Der tatsächliche Wert ist ungefähr genau (so viel wie möglich).

Hinweis: Verwenden Sie immer CultureInfo- Informationen, wenn Sie mit Gleitkommazahlen oder Zeichenfolgen arbeiten.

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

1
@ Mehmetnew System.Globalization.CultureInfo("tr-TR")
Show

20

Sie können Folgendes verwenden:

float asd = (float) Convert.ToDouble("41.00027357629127");

4
Bitte geben Sie einen Kontext an, warum dies die richtige Antwort ist.
Bas Peeters


4

Die Genauigkeit von float beträgt 7 Stellen. Wenn Sie das gesamte Los behalten möchten, müssen Sie den Doppeltyp verwenden, der 15-16 Ziffern enthält. Informationen zur Formatierung finden Sie in einem Beitrag zum Formatieren von Doppeln . Und Sie müssen sich um Dezimaltrennzeichen in C # kümmern .


ı müde double.Parse es gibt 4100027357629127.0 es ist schade
Mehmet

2
Das klingt nach dem '.' Zeichen ist nicht das Dezimaltrennzeichen in Ihrem Gebietsschema? Schauen Sie sich stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe

0

Sie können double.Parse("41.00027357629127");


Ich glaube nicht, dass er fragt, wie er es abrunden soll.
ODER Mapper

-2

Sie können das Parsen mit double anstelle von float verwenden, um einen genaueren Wert zu erhalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.