Преобразовать 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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5