vijay_bale Ответов: 1

Проблема преобразования данных в C#


У меня есть одно текстовое поле в форме windows c#.
Я принимаю участие.
затем я хочу преобразовать это в двойное. Вот проблема надвигается.
double.TryParse(txtdisc.Text, out b);

я отладил и увидел, что там происходит актутально. В этом текстовом поле есть значение, но в этом "b"нет никакого значения.Я объявил "b" как double b=0.00.
так что в "Б"идет только 0. Что делать.

Что я уже пробовал:

Я пробовал и другими способами, например, обращать.Чтобы удвоить и удвоить.Разбор, но бесполезно. Я получаю это только здесь. другая форма та же самая, что работала с другими значениями. Почему вот так.
что же теперь делать?

[no name]

"В этом текстовом поле value" вы видели, какое там значение? Действительно ли это струна-двойник? Вы проверяете возвращаемое значение TryParse?

vijay_bale

Я проверил. Здесь TryParse возвращает значение 0.но в текстовом поле Значение есть 156.

[no name]

Значит, вы чего-то не договариваете. TryParse не возвращает 0.

vijay_bale

@NotPloitically,
двойной.Метод tryparse(txtdisc.Текст, из б);
вот и все. Нечего скрывать от вас, людей, которые пытаются мне помочь.

[no name]

"Здесь TryParse возвращает значение 0", TryParse не возвращает 0. Значит, есть что-то, о чем Вы нам не говорите.

Dave Kreskowiak

TryParse возвращает значение true/false, а не число. Вы не проверяете это возвращаемое значение. Если это значение false, то существует проблема со строкой, которую вы передали, что приводит к сбою операции синтаксического анализа для типа значения, которое вы ищете.

vijay_bale

Я видел эту ценность. Ложь приближается.

Dave Kreskowiak

Это означает, что есть проблема с входной строкой. Поскольку мы этого не видим, а вы не сказали нам точно, что это за струна, мы не можем сказать вам, что с ней не так.

vijay_bale

@ Дейв
просто я расчетливый какой элемент управления DataGrid клеток валу и хранить в переменной типа double.
это значение я преобразую в строку и отображаю в этом текстовом поле.Только это текстовое поле я конвертирую в double и хочу сделать с ним некоторые вычисления и вывод dsiplay.

Dave Kreskowiak

И это абсолютно ничего не говорит нам о строке, которую вы пытаетесь преобразовать в двойник.

vijay_bale

@ dave, я преобразую двойное значение в строку и отображаю его в текстовом поле. только это значение текстового поля я пытаюсь преобразовать в двойное.
это вам ничего не говорит, Тогда то, что вы хотите знать, просто скажите мне.

Dave Kreskowiak

О, я не знаю. Как насчет фактического значения txtdisc. Text!

Когда отладчик останавливается и показывает вам строку, в которой выбрасывается исключение, вы наводите курсор мыши .Текстовая часть, и она покажет вам значение.

Вы действительно не знаете, как использовать отладчик?

vijay_bale

значение txtdisc равно 156.

Dave Kreskowiak

Ну, это не так, потому что "156" прекрасно разбирается как дубль. Там есть еще кое-что, о чем ты нам не рассказываешь.

Dave Kreskowiak

Поставьте точку останова в строке TryParse и запустите код. Когда отладчик остановится, наведите курсор мыши на него .Текстовую часть строки и изучите значение. Это не "156". Это совсем не то, что вы думаете.

Отладчик существует для того, чтобы отлаживать вас, а не код. Он существует для того, чтобы улучшить ваше понимание кода.

vijay_bale

http://tinypic.com/r/2rdu3ow/9
http://tinypic.com/r/2r3ci2p/9

сюда же я помещаю и изображения отладки. просто взгляните

Dave Kreskowiak

Черт побери, ты делаешь все гораздо сложнее, чем это должно быть.

Перед 604.72 есть глупые символы, которые вы пытаетесь преобразовать. Именно из-за этих символов вы не можете преобразовать 604.72 в double.

vijay_bale

Я удалил этот символ валюты. Теперь она преобразована.большое вам спасибо за вашу помощь и за то, что вы рассказали мне о проблеме.

vijay_bale

Это код, в котором я вычисляю значение суммы ячеек datagridview и, наконец, преобразую и сохраняю его в текстовое поле.
public void totalsum()
{
int i = 0;
двойной j = 0.00;


for (i = 0; i <dataGridView1. Rows.Граф; ++i)
{

j += преобразовать.Метод todouble(dataGridView1.Строки[я].Ячейки[5]. Значение);
Математика.Раунд (j, 2, MidpointRounding.ToEven);
// return (int)Math.Этаж (j + .49);
// MessageBox.Показать(Дж.Метод toString());
}
txtitmtotal.Text = j. ToString("c");

[no name]

в этом фрагменте кода нет кода, которым вы поделились в описании проблемы. Где этот код появляется на картинке. Используйте опцию улучшить вопрос, чтобы добавить свой правильный код, вызывающий проблему

vijay_bale

конвертация будет однострочной, одна на.
двойной.Метод tryparse(txtitemtotal.Текст, из б);
Я cahnged что txtdisc.текст с txtitemtotal.текст
думая, что, возможно, проблема с этим текстовым полем. поэтому я переоделся.

1 Ответов

Рейтинг:
1

Vinod Jangle

Можете ли вы попробовать с приведенным ниже фрагментом кода -

double b;
bool IsDoubleValue = double.TryParse(textBox1.Text, out b);

//do whatever you want with this value
var doubleTypeValue = IsDoubleValue ? Convert.ToDouble(textBox1.Text) : 0;


vijay_bale

@ vinod, я попробовал то, что вы дали здесь.но значение 0 приближается к b.это значение текстового поля равно 156.

[no name]

Возвращаемый тип только для Tryparse id Boolean, может быть что-то не так, если вы получите 0. Поделитесь кодом

vijay_bale

Isdoublevalue False приближается.
bool IsDoubleValue = double.Метод tryparse(txtitmtotal.Текст, из б);
двойной d=b* 10;
var doubleTypeValue = IsDoubleValue ? Преобразовать.ToDouble(txtitmtotal. Text) : 0;

Ящик для сообщений.Показать (d. ToString());

[no name]

Ну в описании проблемы вы упоминаете "txtdisc.Текст" и в этом кодексе вы ссылаетесь "txtitmtotal.Текст". Итак, вопрос в том, какое текстовое поле вы действительно хотите использовать здесь и вызывает проблему?

vijay_bale

Я изменил текстовое поле, думая,что, возможно, проблема с этим текстовым полем. так что здесь показывается другой.