2017-03-13 2 views
-6

Hallo Welt Ich habe ein Problem beim Konvertieren von Zeichenfolge, die float-Nummer (ex. Zeichenfolge s = "23.532") enthält, um zu floaten. Bitte schau es dir an. Werte werden aus der TXT-Datei übernommen.Konvertieren von Zeichenfolge in Float-Problem

Screenshot #1

Screenshot #2

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 


namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //Chart Properties 
      chart1.ChartAreas[0].AxisX.ScaleView.Zoom(-5, 5); 
      chart1.ChartAreas[0].AxisY.ScaleView.Zoom(0, 1000); 
      chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true; 







      chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; 

     } 

     private void BLoad_Click(object sender, EventArgs e) 
     { 
      //Load File 
      string SingleNumb= ""; 
      OpenFileDialog ofd = new OpenFileDialog(); 
      if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { 
       StreamReader sr = new StreamReader(File.OpenRead(ofd.FileName)); 

       while ((SingleNumb = sr.ReadLine()) != null) 
       { 
        float value = float.Parse(SingleNumb); 
        //MessageBox.Show(value.ToString()); just to correct values 
       } 


        //chart1.Series[0].Points.AddXY(Single.Parse(SingleNumb), i++); 


       sr.Dispose(); 
       sr.Close(); 
      } 

     } 
    } 
} 

Textdatei

0.534 
-0.283 
4.632 
-8.5325 
+0

dringend empfohlen, float.TryParse (string, out float) in diesen Szenarien zu verwenden. – celerno

+1

Wahrscheinlich hat SingleNumb kein gültiges Float. Welcher Wert ist der Wert, wenn die Ausnahme ausgelöst wird? –

+0

SingleNumb-Wert ist "0,534" –

Antwort

0

Wenn s Tring verwendet Punkt als Dezimalzeichen, können Sie diese Überlastung verwendet werden sollen (.):

float xFreq = Convert.ToSingle(param, CultureInfo.InvariantCulture); 

Nicht wirklich sicher, aber Zusätzliche Informationen sehen slawisch mir und das Standard Dezimaltrennzeichens könnte Komma (,) anstelle von Punkt. Dies hängt natürlich von der Kultur des aktuellen Threads ab, die von den regionalen Einstellungen abhängt.

+0

Zahlen werden mit Punkt getrennt. Vor Code gibt Fehler \t CS0103 \t der Name ‚Culture‘ existiert nicht im aktuellen Kontext –

+0

@ DE4POW Dies ist höchstwahrscheinlich die Antwort, die Sie suchen ... nicht wirklich sicher, warum es Downvoted ... (wahrscheinlich jemand dachte, dass es Tonnen "Parsing Nummer wie Float in Polen versagt" Fragen und für Spaß zum Downvoloted) –

+0

Vielen Dank für die Antwort;) –

-2

Sie suchen nach dem Convert.ToSingle() -Methode:

string floatString = "23.532"; 
float actualFloat = Convert.ToSingle(floatString); 
2

sollten Sie float.TryParse(string, float) verwenden, weil es zu testen, ob die string, die Sie vor Umwandlung in eine float umgewandelt werden können analysieren möchten.

Dieses versuchen:

string floatString = "23.532"; 
float number = 0; 
if (float.TryParse(floatString, out number)) Console.WriteLine($"Number = {number}"); 

float.TryParse(string, float) Method Wandelt den string Darstellung einer Zahl seiner einfacher Genauigkeit Gleitkommazahl äquivalent. Ein Rückgabewert gibt an, ob die Konvertierung erfolgreich war oder fehlgeschlagen ist. true bedeutet erfolgreich und false andernfalls.

+0

Sie sollten eine Erklärung hinzufügen, warum diese Antwort verwendet werden sollte (z. B. warum TryParse in diesem Fall über Parse nützlich ist). – Adrian

+0

@Adrian sicher, ich werde meine Antwort aktualisieren –

0

Verwenden Sie TryParse und überprüfen Sie das Ergebnis.

float number; 

if(float.TryParse(floatString, out number)) 
{ 
    ... 
} 
0

aktualisieren, während Schleife innerhalb der Funktion BLoad_Click (...) wie folgt:

while((SingleNumb = sr.ReadLine()) != null) 
{ 
    NumberStyles style = NumberStyles.Any; 
    CultureInfo culture = CultureInfo.InvariantCulture; 

    float value = 0.0f; 
    if (float.TryParse(SingleNumb, style, culture, out value)) 
    { 
     MessageBox.Show(value.ToString()); 
    } 
    else 
    { 
     MessageBox.Show("Conversion failed!"); 
    } 
} 

Anmerkung: 'float.TryParse (...)' - Zeichenfolge Wandelt Darstellung einer Zahl zu sein Gleitkommazahläquivalent. Ein Rückgabewert gibt an, ob die Konvertierung erfolgreich war oder fehlgeschlagen ist.

+0

Fehler die ganze Zeit –

+0

Was ist der Wert von SingleNumb? Versuchen Sie den Wert von SingleNumb zu debuggen. –

+0

Sorry, aber ich bin nicht wirklich so tief in C# zu wissen, wie Debuggen noch. Enthaltener ganzer Code im Hauptbeitrag, wenn Sie schauen möchten. –

0

Könnten Sie versuchen:

string SingleNumb = "23.532"; 
float value = float.Parse(SingleNumb); 

Ergebnis aus der Umwandlung:

enter image description here

Ich frage mich, ob der Wert aus der Datei sind Laden eine gültige Zeichenfolge ist!

-2

Können Sie dies versuchen ....

string SingleNumb = ""; 
string[] lines = System.IO.File.ReadAllLines(@"C:\testFile.txt"); 

// Display the file contents by using a foreach loop.    
foreach (string line in lines) 
{ 
    if((SingleNumb = line) != null) 
    { 
     float value = float.Parse(SingleNumb); 
    } 
} 

(*) erstellen Sie eine Datei "Testfile.txt" in C: \ mit den Werten, die Sie haben.

Dies sollte so funktionieren, wie Sie es erwarten.

+0

Warum wurde meine Antwort abgelehnt? Nur um Sie wissen zu lassen, dass ich getestet und es funktioniert perfekt. –