Satrni float muammosiga aylantirmoq

Salom dunyo Men float raqamini (ex string s = "23.532") o'z ichiga olgan mag'lubiyatga aylantirmoqchi bo'lgan ba'zi muammolar bor. Iltimos, bir ko'z tashlang. Qiymatlar .txt faylidan olingan.

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();
            }

        }
    }
}

matnli fayl

0.534
-0.283
4.632
-8.5325
6
Iltimos, kodni matn sifatida emas, balki rasm sifatida qo'shing.
qo'shib qo'ydi muallif Mike McCaughan, manba
Siz Polshadan ekanligingiz uchun yoki , float.Parse chaqiruviga , ni o'nlik ajratuvchi sifatida yoki CultureInfo.InvariantCulture dan foydalanishingiz kerak. Bir nuqtada dip topasiz.
qo'shib qo'ydi muallif Alexei Levenkov, manba
Ehtimol, SingleNumb-da haqiqiy float yo'q. Istisno qilinayotganda uning qiymati qanday?
qo'shib qo'ydi muallif Douglas Gandini, manba
Ushbu stsenariylarda float.TryParse (string, float) dan foydalanish tavsiya etiladi.
qo'shib qo'ydi muallif celerno, manba
Sizning kirishlaringiz bilan harakat qildim (0.534, -0.283, 4.632, -8.5325) va yaxshi ishlaydi. Bizning matn faylimizda ikkita tirnoq (") mavjudmi?
qo'shib qo'ydi muallif RK_Aus, manba
Asosiy postga qo'shilgan.
qo'shib qo'ydi muallif DE4 POW, manba
SingleNumb qiymati "0,534"
qo'shib qo'ydi muallif DE4 POW, manba

7 javoblar

float.TryParse (string, float) dan foydalaning. kodini o'zgartirmasdan oldin float ga o'zgartirilishi mumkinligini tekshiradi.

Buni sinab ko'ring:

string floatString = "23.532";
float number = 0;
if (float.TryParse(floatString, out number)) Console.WriteLine($"Number = {number}");
float.TryParse(string, float) Method Converts the string representation of a number to its single-precision floating-point number equivalent. A return value indicates whether the conversion succeeded or failed. true means succeeded and false otherwise.

2
qo'shib qo'ydi
@Adrian ishonchim komilki, javobimni yangilayman
qo'shib qo'ydi muallif Aominè, manba
Ushbu javobni nima uchun ishlatish kerakligi haqidagi ba'zi izohlar (masalan, TryParse bu holatda Parse orqali foydalangandir) kabi ba'zi izohlarni kiritishingiz kerak.
qo'shib qo'ydi muallif Adrian, manba

Convert.ToSingle() usulini qidiryapsiz:

string floatString = "23.532";
float actualFloat = Convert.ToSingle(floatString);
2
qo'shib qo'ydi

Buni sinash mumkinmi ...

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);
     }
} 

(*) "testFile.txt" faylida sizda mavjud bo'lgan qiymatlar bilan "C: \" faylini yarating.

Bu siz kutganingizdek ishlashi kerak.

2
qo'shib qo'ydi
Nega javobim pastga tushdi? Men sizni sinovdan o'tkazganimni va uning mukammal ishlashini bilish uchun.
qo'shib qo'ydi muallif Red Devil, manba

Agar sizning satrida o'nlik kasr sifatida nuqta (.) Dan foydalansangiz, ushbu ortiqcha yuk ishlatishingiz kerak:

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

Ehtimol, ishonchim komil emas, lekin qo'shimcha ma'lumotlar menga slavyan ko'rinadi va asl qiymati kasrli ajratuvchi nuqta o'rniga vergul (,) bo'lishi mumkin. Albatta, bu mintaqaviy sozlamalarga bog'liq oqimning madaniyatiga bog'liq.

0
qo'shib qo'ydi
@ DE4POW - System.Globalization -ni hujjatlar .
qo'shib qo'ydi muallif Alexei, manba
@ DE4POW Bu sizning izlayotgan javobingizning eng muhimi ... Nimaga u pastga tushirilganligiga amin emasman ... (ehtimol, kimdir "Polshada float unsurlarning ajralib turishi" kabi savollar bor va o'yin-kulgi uchun pastga tushgan)
qo'shib qo'ydi muallif Alexei Levenkov, manba
Raqamlar nuqta bilan ajralib turadi. Yuqoridagi kod xato qaytib keladi CS0103 Joriy matnda "CultureInfo" nomi mavjud emas
qo'shib qo'ydi muallif DE4 POW, manba
Javobingiz uchun tashakkur; )
qo'shib qo'ydi muallif DE4 POW, manba

TryParse dan foydalaning va natijani tekshiring.

float number;

if(float.TryParse(floatString, out number))
{
   ...
}
0
qo'shib qo'ydi

Quyidagi BLoad_Click (...) funktsiyasi ichidagi pastadirni yangilang:

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!");
    }
}

Ahamiyat bering: 'float.TryParse (...)' - raqamning mag'lubiyatga rasmini uning suzuvchi nuqta raqamiga aylantiradigan darajasiga o'zgartiradi. Qaytish qiymati konvertatsiya muvaffaqiyatli yoki muvaffaqiyatsizligini bildiradi.

0
qo'shib qo'ydi
SingleNumb qiymatining qiymati nima? SingleNumb qiymatini disk raskadrovka qilishga harakat qiling.
qo'shib qo'ydi muallif RK_Aus, manba
Sizning kirishlaringiz bilan harakat qildim (0.534, -0.283, 4.632, -8.5325) va yaxshi ishlaydi. Matn fayli ikki tirnoq (") mavjudmi?
qo'shib qo'ydi muallif RK_Aus, manba
Sizning hozirgi madaniyatingiz qanday? Boshqaruv paneliga o'ting va "Region va Language" ni tanlang, "Joylashuv" yorlig'ini tanlang va "Hozirgi manzil" qiymatini yuboring.
qo'shib qo'ydi muallif RK_Aus, manba
Men sizning madaniyatingizni Polshalik deb hisobladim, iltimos mening yangilangan javobimdan foydalaning.
qo'shib qo'ydi muallif RK_Aus, manba
Har doim bajarilmaydi
qo'shib qo'ydi muallif DE4 POW, manba
Kechirasiz, lekin men hozirda qanday disk rasagini bilish uchun C# da chindan ham chuqur emasman. Agar u qidirib ko'rishni istasa, asosiy postda umumiy kod kiritilgan.
qo'shib qo'ydi muallif DE4 POW, manba
Faqat "aniq" raqamlar yo'q. prntscr.com/ejlu93
qo'shib qo'ydi muallif DE4 POW, manba

Siz harakat qilib ko'ring:

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

Konvertatsiya qilish natijasida:

enter image description here

Tasavvur qilaman, siz fayldan yuklamoqchi bo'lgan qiymat to'g'ri bo'lgan mag'lubdir.

0
qo'shib qo'ydi