Преобразовать 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д