PDA

View Full Version : آموزش: مشکل تبدیل string به Double



mvb_mehran
چهارشنبه 04 اردیبهشت 1392, 17:24 عصر
سلام
http://uploadax.com/images/21606522505746140737.jpg
اشکال من کجاست که نمیتونم مقادیر string و به Double تبدیل کنم.
در ضمن اطلاعات ورودی من از طریق پورت usb می باشد که می خوام دمای محیط و با استفاده از سنسور مجزا روی guage نمایش بدم.guage من فقط مقدار double قبول میکنه.
در ضمن من همین کار رو روی vb.net انجام دادم که بدون اینکه اشکالی به وجود بیاد برنامه اجرا شد.
ممنون

mvb_mehran
چهارشنبه 04 اردیبهشت 1392, 17:25 عصر
اینم کدمه:

try
{

mehran.BaudRate = System.Convert.ToInt32(c1TextBox1.Text);
mehran.PortName = "COM3";
mehran.Open();
while (true)
{
string i = mehran.ReadExisting();

// double A;
// listBox1.Items.Add(i);
textBox1.Text = (i);


c1LinearGauge1.Value = i;
// Thread.Sleep(200);
}
}
catch { }
}

Arcsinos
چهارشنبه 04 اردیبهشت 1392, 17:57 عصر
برادر باید استرینگ رو پارزش (Pars)کنی اینطوری


double d = 0;
string str = "10.25";
d = Double.Parse(str);

mvb_mehran
چهارشنبه 04 اردیبهشت 1392, 18:03 عصر
http://uploadax.com/images/05532379726323587206.jpg
آقا بازم ارور داد.
چطور میشه یک عدد با چند رقم اعشار رو تعداد اعشارش رو کمتر کرد.عدد ورودی به برنامه 6 رقم اعشار دارد.

Arcsinos
چهارشنبه 04 اردیبهشت 1392, 18:12 عصر
برادر ارتباطی به ارقامت نداره، شما اول این str رو به ما نشان بده بینیم اصلا توش چیه که FormatExeption پرتاب میکنه . کد زیر 7 رقم اعشار داره اجرا میشه

double d = 0;
string str = "10.2544444";
d = Double.Parse(str);
MessageBox.Show(d.ToString());

mvb_mehran
چهارشنبه 04 اردیبهشت 1392, 18:28 عصر
http://uploadax.com/images/58370003817564864247.jpg
این ورودی است که بدون مشکل در لیست باکس نمایش داده می شود.ولی هر کاریش می کنم نمیتونم تبدیلش کنم به دابل تا تو guage نمایشش بدم.
ممنون بابت وقتی که میذارید

Arcsinos
چهارشنبه 04 اردیبهشت 1392, 18:38 عصر
برادر کل لیستت رو نشون بده، یه میخوای پروژه رو اتچ کن برامون البه اگه حقوق کپی رایت رعایت میشه، یه میخوای کدت رو برامون بفرست، فکر میکنم یکی از اعدادی که تو لیست هست مشکل داره مثلا مثل همین .27 که قسمت اعشارش نوشته نشده البته این رو من الان امتحان کردم و دونستم که مشکلی نداره ولی به نظر میاد یکی از ورودی هات مشکل داشته باشه

mvb_mehran
چهارشنبه 04 اردیبهشت 1392, 18:41 عصر
یعنی چی اونوقت؟؟:متفکر:

mvb_mehran
چهارشنبه 04 اردیبهشت 1392, 18:46 عصر
پروژمو که نمی تونم اتچ کنم شما اجراش کنید.چون یه مدار وصل کردم به پورت یو اس بی و میخوام اطلاعات یک سنسور رو داخل برنامه نمایش بدم فرضا سنسور دما.تو وی بی دات نت بدون مشکل اجرا میشه ولی میخوام سی شارپ باشه که متاسفانه ارور دارم.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Management;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
using System.Windows.Converters;
namespace Test1
{
public partial class Form1 : Form
{
SerialPort mehran = new SerialPort();
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{


}

private void c1Button1_Click(object sender, EventArgs e)
{


mehran.BaudRate = System.Convert.ToInt32(c1TextBox1.Text);
mehran.PortName = "COM3";
mehran.Open();
while (true)
{
string i = mehran.ReadExisting();

c1RadialGauge1.Value = (i);
Thread.Sleep(200);
}
}


}
}

کل کدهام همینا هستند البته double.parse رو الان حذف کردم.

Arcsinos
چهارشنبه 04 اردیبهشت 1392, 18:52 عصر
خب میخوای یه کاری کن ، بنویس c1RadialGauge1.Value =Double.Parse(i) و وقتی که FormatExeption پرتاب شد موس رو ببر روی متغیر i و ببین Valueش چیه، بعد یه عکس از اون Value بگیر و بذار اینجا تا اگه خدا بخواد ببینیم مشکل از کجاست

mvb_mehran
چهارشنبه 04 اردیبهشت 1392, 18:58 عصر
http://uploadax.com/images/39280876291427642936.jpg
اینم ارور!!!

Arcsinos
چهارشنبه 04 اردیبهشت 1392, 19:04 عصر
برادر منظورمن چیز دیگری بود وقتی ارور داد برو ببین کدوم خط ارور داده بعد موس رو ببر رو متغیر i بعد مقدارش رو ببین چنده مثلا کد زیر ارور داره و وقتی من موس رو بردم روی str مقدارش که ..10 هست رو بهم نشون داد

103277

با تشکر

mvb_mehran
چهارشنبه 04 اردیبهشت 1392, 19:12 عصر
http://uploadax.com/images/16800739022099328443.jpg
http://uploadax.com/images/61528784440595645710.jpg
عکس اول مقدار داخل i
عکس دوم مقدار aa

Arcsinos
چهارشنبه 04 اردیبهشت 1392, 19:12 عصر
خب مثل اینکه تصویر عوض شد : قبل از اینکه i رو پارس کنی بیا این کار رو انجام بده :



double d = 0;
string str = "10..";
try
{
d = Double.Parse(str);
}
catch
{
d = 0;
}
MessageBox.Show(d.ToString());


می تونی این کار هم انجام بدی البته این به درد کار شما میخورد چون مقدار i خالی هست نمی تواند آن را به Double تبدیل کند


double d = 0;
string str = "";
if (str != string.Empty)
d = Double.Parse(str);
else

d = 0;
MessageBox.Show(d.ToString());


آقا مثل اینکه شما یه اشتباه دیگری هم میکنی و اینکه ورودی خود را به صورت کلی میخوانی . باید یه خط یه خط بخونی اینطور که معلومه کل لیست داخل متغیر i هست (r/) نشان دهنده ی خط جدید هست بیا یه کاری کن اول رشتت رو Splitکن بعد روش کار کن . مثل این کد.


double d = 0;
string str = "10\r20\r10.25\r125.236";
var list = str.Split('\r');
foreach (string s in list)
{
d = Double.Parse(s);
}

Arcsinos
چهارشنبه 04 اردیبهشت 1392, 19:32 عصر
دوست عزیز چون توی رشته ی تو از r\n\ استفاده شده میتونی از این کدها استفاده کنی.


double d = 0;
string str = "10\r\n20\r\n10.25\r\n125.236";
string[] ch = { "\r\n" };
var list = str.Split(ch, StringSplitOptions.None);
foreach (string s in list)
{
d = Double.Parse(s);
}


یا این


double d = 0;
string str = "10\r\n20\r\n10.25\r\n125.236";
char[] ch = { '\r' };
var list = str.Split(ch, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in list)
{
d = Double.Parse(s);
}

Latifi
جمعه 06 اردیبهشت 1392, 00:34 صبح
Convert.ToDecimal(مقدار رشته ای)