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