Преобразовать String в Double - C#
Формулировка задачи:
Добрый день. Подскажите пожалуйста...
Я из ком-порта получаю температуру. сначала оно у меня поступает в строковом формате вида "23.11"... Затем мне надо ее использовать в формате Double. Я осуществляю перевод через Convert, но число получается без точки в виде "2311"... Как сделать так чтобы была точка при переводе в формат double???? или может быть подскажете как просто число 2311 разделить точкой... Ниже код, где перевод в строку осуществляется вначале функции DataReceivedHandler, а в число далее в этой же функции.
using System; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.IO.Ports; using System.IO; using System.Collections.Generic; using System.Diagnostics; using System.Windows.Forms.DataVisualization.Charting; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private Random random = new Random();//случайное число private int pointIndex;//шаг сетки оп оси Y SerialPort mySerialPort = new SerialPort("COM7"); string s; double t; //общее количество точек на графике int numberOfPointsInChart = 100; //количество точек в графике после удаления int numberOfPointsAfterRemoval = 95; private void Form1_FormClosing(object sender, FormClosingEventArgs e) { } private void Form1_Load(object sender, EventArgs e) { textBox2.Text = "0"; } private void button1_Click(object sender, EventArgs e) { button1.Enabled = false; label3.Visible = false; timer1.Enabled = true; try { mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.Handshake = Handshake.None; mySerialPort.DataBits = 8; mySerialPort.StopBits = StopBits.One; //mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); mySerialPort.DataReceived += (s,e1) => DataReceivedHandler(s,e1); mySerialPort.Open(); } catch (Exception exc) { exc.Source = "Ошибка подключения к COM порту"; MessageBox.Show("Ошибка подключения к COM порту. Проверьте подключение!"); button1.Enabled = true; label3.Visible = true; } } private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; s = sp.ReadExisting(); s = s.Replace('.', ','); this.Invoke((MethodInvoker)delegate { textBox1.Text = s; }); Thread.Sleep(500); string tmax; double tmax1; tmax = textBox2.Text; try { tmax1 = Convert.ToDouble(tmax, System.Globalization.CultureInfo.InvariantCulture); } catch (Exception exc) { tmax1 = 00.00; exc.Source = ""; // MessageBox.Show("Получен неверный формат температуры..."); } Console.WriteLine(tmax1); Console.Read(); try { var str_arr = s.Split(new char[] { '\n', '\r' }); foreach (var s1 in str_arr) { if (s1.Length > 0) { t = Convert.ToDouble(s1, System.Globalization.CultureInfo.InvariantCulture); Console.WriteLine(t); Console.Read(); // Max if (t > tmax1) { this.Invoke((MethodInvoker)delegate { textBox2.Text = s; }); } else { this.Invoke((MethodInvoker)delegate { textBox2.Text = tmax; }); }; // характеристика диагностирования if (t < 3000) { this.Invoke((MethodInvoker)delegate { richTextBox1.Text = "Не нагретое масло в загустелом состоянии может привести к наибольшим износам и к серьезным повреждениям рабочих поверхностей подшипника. "; }); }; if (t > 3000 && t <5000) { this.Invoke((MethodInvoker)delegate { richTextBox1.Text = "Недостаточно нагретое масло может привести к износу и к значительным повреждениям рабочих поверхностей подшипника. "; }); }; if (t > 5000 && t < 7000) { this.Invoke((MethodInvoker)delegate { richTextBox1.Text = "Вязкость масла соответствует норме. Устойчивый слой масла, полностью разделяющий шероховатости поверхностей трения. Возникает жидкостная смазка, при которой изнашивание и заедание отсутствуют. "; }); }; if (t > 7000 && t < 9000) { this.Invoke((MethodInvoker)delegate { richTextBox1.Text = "Понижение вязкости масла, местами возможен разрыв маслянной пленки. Образуется металлический контакт с температурными пиками. Происходит заедание цапфы в подшипнике. "; }); }; if (t > 9000 && t < 15000) { this.Invoke((MethodInvoker)delegate { richTextBox1.Text = "Значительное понижение вязкости масла. Разрыв маслянной пленки вследствии разжижения масла в следствии чего появляется кратковременный сухой контакт поверхностей трения, что приводит к высокочастотной вибрации корпуса подшипникового узла. Происходит окисление масла, а таже теряются смазочные свойства."; }); }; break; } } } catch (Exception exc) { exc.Source = ""; //MessageBox.Show(s); } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { } private void button2_Click(object sender, EventArgs e) { //mySerialPort.DataReceived -= (s, e1) => DataReceivedHandler(s, e1); //mySerialPort.DiscardOutBuffer(); //mySerialPort.Close(); } private void timer1_Tick(object sender, EventArgs e) { //добавление случайной точки через Random в диапозоне от 0 до 12 chart1.Series["Series1"].Points.AddXY(pointIndex + 1, t); ++pointIndex; chart1.ResetAutoValues(); /*когда в графике будет 101 точка (в нашем случае их numberOfPointsInChart) активируется процесс удаления лишних данных вышедших за переделы графика. Количество точек в графике хранится в ...Points.Count. */ while (chart1.Series["Series1"].Points.Count > numberOfPointsInChart) { //Удаление данных вышедших за пределы графика слева //оставляем точек на графике не более чем задано переменной numberOfPointsAfterRemoval while (chart1.Series["Series1"].Points.Count > numberOfPointsAfterRemoval) { //каждая точка удаляется индивидуально, с начала графика. После удаления нолевой //точки - RemoveAt(0). Следующая за ней встает на ее место и так до тех пор, //пока не выполнится условие цикла chart1.Series["Series1"].Points.RemoveAt(0); } //Масштаб оси Х chart1.ChartAreas["ChartArea1"].AxisX.Minimum = pointIndex - numberOfPointsAfterRemoval; chart1.ChartAreas["ChartArea1"].AxisX.Maximum = chart1.ChartAreas["ChartArea1"].AxisX.Minimum + numberOfPointsInChart; } chart1.Invalidate();//перерисовка графика } } }
Решение задачи: «Преобразовать String в Double»
textual
Листинг программы
int number = Ваше_Число double total = (double)(number/100);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д