Преобразовать String в Double - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Подскажите пожалуйста... Я из ком-порта получаю температуру. сначала оно у меня поступает в строковом формате вида "23.11"... Затем мне надо ее использовать в формате Double. Я осуществляю перевод через Convert, но число получается без точки в виде "2311"... Как сделать так чтобы была точка при переводе в формат double???? или может быть подскажете как просто число 2311 разделить точкой... Ниже код, где перевод в строку осуществляется вначале функции DataReceivedHandler, а в число далее в этой же функции.
Листинг программы
  1. using System;
  2. using System.ComponentModel;
  3. using System.Data;
  4. using System.Drawing;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Threading;
  9. using System.IO.Ports;
  10. using System.IO;
  11. using System.Collections.Generic;
  12. using System.Diagnostics;
  13. using System.Windows.Forms.DataVisualization.Charting;
  14.  
  15. namespace WindowsFormsApplication3
  16. {
  17.  
  18. public partial class Form1 : Form
  19. {
  20. public Form1()
  21. {
  22. InitializeComponent();
  23. }
  24.  
  25. private Random random = new Random();//случайное число
  26. private int pointIndex;//шаг сетки оп оси Y
  27.  
  28. SerialPort mySerialPort = new SerialPort("COM7");
  29. string s;
  30. double t;
  31. //общее количество точек на графике
  32. int numberOfPointsInChart = 100;
  33. //количество точек в графике после удаления
  34. int numberOfPointsAfterRemoval = 95;
  35.  
  36. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  37. {
  38. }
  39. private void Form1_Load(object sender, EventArgs e)
  40. {
  41. textBox2.Text = "0";
  42. }
  43.  
  44. private void button1_Click(object sender, EventArgs e)
  45. {
  46. button1.Enabled = false;
  47. label3.Visible = false;
  48. timer1.Enabled = true;
  49. try
  50. {
  51. mySerialPort.BaudRate = 9600;
  52. mySerialPort.Parity = Parity.None;
  53. mySerialPort.Handshake = Handshake.None;
  54. mySerialPort.DataBits = 8;
  55. mySerialPort.StopBits = StopBits.One;
  56. //mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
  57. mySerialPort.DataReceived += (s,e1) => DataReceivedHandler(s,e1);
  58. mySerialPort.Open();
  59. }
  60. catch (Exception exc) { exc.Source = "Ошибка подключения к COM порту";
  61. MessageBox.Show("Ошибка подключения к COM порту. Проверьте подключение!");
  62. button1.Enabled = true;
  63. label3.Visible = true;
  64. }
  65.  
  66. }
  67.  
  68. private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
  69. {
  70. SerialPort sp = (SerialPort)sender;
  71. s = sp.ReadExisting();
  72. s = s.Replace('.', ',');
  73. this.Invoke((MethodInvoker)delegate { textBox1.Text = s; });
  74. Thread.Sleep(500);
  75. string tmax;
  76. double tmax1;
  77. tmax = textBox2.Text;
  78. try
  79. {
  80. tmax1 = Convert.ToDouble(tmax, System.Globalization.CultureInfo.InvariantCulture);
  81. }
  82. catch (Exception exc)
  83. {
  84. tmax1 = 00.00;
  85. exc.Source = "";
  86. // MessageBox.Show("Получен неверный формат температуры...");
  87. }
  88. Console.WriteLine(tmax1);
  89. Console.Read();
  90.  
  91. try
  92. {
  93. var str_arr = s.Split(new char[] { '\n', '\r' });
  94. foreach (var s1 in str_arr)
  95. {
  96. if (s1.Length > 0)
  97. {
  98. t = Convert.ToDouble(s1, System.Globalization.CultureInfo.InvariantCulture);
  99. Console.WriteLine(t);
  100. Console.Read();
  101. // Max
  102. if (t > tmax1)
  103. {
  104. this.Invoke((MethodInvoker)delegate { textBox2.Text = s; });
  105. }
  106. else
  107. { this.Invoke((MethodInvoker)delegate { textBox2.Text = tmax; }); };
  108.  
  109. // характеристика диагностирования
  110. if (t < 3000)
  111. {
  112. this.Invoke((MethodInvoker)delegate
  113. {
  114. richTextBox1.Text = "Не нагретое масло в загустелом состоянии может привести к наибольшим износам и к серьезным повреждениям рабочих поверхностей подшипника. ";
  115. });
  116. };
  117. if (t > 3000 && t <5000)
  118. {
  119. this.Invoke((MethodInvoker)delegate
  120. {
  121. richTextBox1.Text = "Недостаточно нагретое масло может привести к износу и к значительным повреждениям рабочих поверхностей подшипника. ";
  122. });
  123. };
  124. if (t > 5000 && t < 7000)
  125. {
  126. this.Invoke((MethodInvoker)delegate
  127. {
  128. richTextBox1.Text = "Вязкость масла соответствует норме. Устойчивый слой масла, полностью разделяющий шероховатости поверхностей трения. Возникает жидкостная смазка, при которой изнашивание и заедание отсутствуют. ";
  129. });
  130. };
  131. if (t > 7000 && t < 9000)
  132. {
  133. this.Invoke((MethodInvoker)delegate
  134. {
  135. richTextBox1.Text = "Понижение вязкости масла, местами возможен разрыв маслянной пленки. Образуется металлический контакт с температурными пиками. Происходит заедание цапфы в подшипнике. ";
  136. });
  137. };
  138. if (t > 9000 && t < 15000)
  139. {
  140. this.Invoke((MethodInvoker)delegate
  141. {
  142. richTextBox1.Text = "Значительное понижение вязкости масла. Разрыв маслянной пленки вследствии разжижения масла в следствии чего появляется кратковременный сухой контакт поверхностей трения, что приводит к высокочастотной вибрации корпуса подшипникового узла. Происходит окисление масла, а таже теряются смазочные свойства.";
  143. });
  144. };
  145. break;
  146.  
  147. }
  148. }
  149. }
  150. catch (Exception exc)
  151. {
  152. exc.Source = "";
  153. //MessageBox.Show(s);
  154. }
  155. }
  156.  
  157. private void Form1_FormClosed(object sender, FormClosedEventArgs e)
  158. {
  159. }
  160. private void button2_Click(object sender, EventArgs e)
  161. {
  162. //mySerialPort.DataReceived -= (s, e1) => DataReceivedHandler(s, e1);
  163. //mySerialPort.DiscardOutBuffer();
  164. //mySerialPort.Close();
  165.  
  166. }
  167. private void timer1_Tick(object sender, EventArgs e)
  168. {
  169. //добавление случайной точки через Random в диапозоне от 0 до 12
  170. chart1.Series["Series1"].Points.AddXY(pointIndex + 1, t);
  171. ++pointIndex;
  172. chart1.ResetAutoValues();
  173. /*когда в графике будет 101 точка (в нашем случае их numberOfPointsInChart) активируется
  174. процесс удаления лишних данных вышедших за переделы графика. Количество точек в графике
  175. хранится в ...Points.Count. */
  176. while (chart1.Series["Series1"].Points.Count > numberOfPointsInChart)
  177. {
  178. //Удаление данных вышедших за пределы графика слева
  179. //оставляем точек на графике не более чем задано переменной numberOfPointsAfterRemoval
  180. while (chart1.Series["Series1"].Points.Count > numberOfPointsAfterRemoval)
  181. {
  182. //каждая точка удаляется индивидуально, с начала графика. После удаления нолевой
  183. //точки - RemoveAt(0). Следующая за ней встает на ее место и так до тех пор,
  184. //пока не выполнится условие цикла
  185. chart1.Series["Series1"].Points.RemoveAt(0);
  186. }
  187. //Масштаб оси Х
  188. chart1.ChartAreas["ChartArea1"].AxisX.Minimum = pointIndex - numberOfPointsAfterRemoval;
  189. chart1.ChartAreas["ChartArea1"].AxisX.Maximum = chart1.ChartAreas["ChartArea1"].AxisX.Minimum + numberOfPointsInChart;
  190. }
  191. chart1.Invalidate();//перерисовка графика
  192. }
  193. }
  194. }

Решение задачи: «Преобразовать String в Double»

textual
Листинг программы
  1. int number = Ваше_Число
  2. double total = (double)(number/100);

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут