hussain.qudisia Ответов: 2

Как мне устранить ошибку, которую я получаю, она говорит, что входная строка aws не корректна format.at system.number.parsesingle(строковое значение, параметры numberstyles, numberformstioninfo numfmt) в строке 1124?


sw.WriteLine("INVCODE|BILLNO|DATE|BUYERNAME|BUYERADDRESS|VATTINNUMBER|CSTNUMBER|BUYERMOBILE|BUYEREMAIL|TRANSACTIONTYPE|PRODCODE|PRODNAME|UOM|CUR|QTY|RATE|AMOUNT|");

for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)      //for (int i = 0; i <= cCount - 1; i++)     //dt.Rows.Count
{


    string vsINVSINO = ds.Tables[0].Rows[i][ds.Tables[0].Columns[0].ColumnName].ToString();
    string vsINVNO = ds.Tables[0].Rows[i][ds.Tables[0].Columns[1].ColumnName].ToString();
    string vsINVDT = ds.Tables[0].Rows[i][ds.Tables[0].Columns[2].ColumnName].ToString();

    //string vssi_number
    //string vssi_bil_no
    //string vssi_bil_dt
    string vssi_cus_cd = ds.Tables[0].Rows[i][ds.Tables[0].Columns[3].ColumnName].ToString().Trim();

    string vscashcode = ""; //ds.Tables[0].Rows[i][ds.Tables[0].Columns[4].ColumnName].ToString().Trim();
    string vscashname = ""; //ds.Tables[0].Rows[i][ds.Tables[0].Columns[5].ColumnName].ToString().Trim();
    string vscashplace = ""; // ds.Tables[0].Rows[i][ds.Tables[0].Columns[6].ColumnName].ToString().Trim();

    string vsPartyDesc = ""; //ds.Tables[0].Rows[i][ds.Tables[0].Columns[7].ColumnName].ToString().Trim();
    string vsPartyPlace = ""; // ds.Tables[0].Rows[i][ds.Tables[0].Columns[8].ColumnName].ToString().Trim();


    string vsam_name =  ds.Tables[0].Rows[i][ds.Tables[0].Columns[4].ColumnName].ToString();
    string vsam_addr1 = ds.Tables[0].Rows[i][ds.Tables[0].Columns[5].ColumnName].ToString();

    vsam_name = vsam_name.Trim();

    //vsam_name = vsPartyDesc;
    //vsam_addr1 = vsPartyPlace;

    //if (vsam_name == "CASH" && vscashname !="")
    //{
    //    vsam_name = vscashname;
    //    vsam_addr1 = vscashplace;
    //}



    string vsam_addr2 = ds.Tables[0].Rows[i][ds.Tables[0].Columns[6].ColumnName].ToString();
    string vsam_addr3 = ds.Tables[0].Rows[i][ds.Tables[0].Columns[7].ColumnName].ToString();
    string vsam_addr4 = ""; //ds.Tables[0].Rows[i][ds.Tables[0].Columns[8].ColumnName].ToString();
    string vsam_phone = ds.Tables[0].Rows[i][ds.Tables[0].Columns[14].ColumnName].ToString();
    string vsam_rphone = ""; //ds.Tables[0].Rows[i][ds.Tables[0].Columns[15].ColumnName].ToString();
    string vsam_tngstno = ""; // ds.Tables[0].Rows[i][ds.Tables[0].Columns[7].ColumnName].ToString();
    string vsam_cstno = ""; // ds.Tables[0].Rows[i][ds.Tables[0].Columns[17].ColumnName].ToString();


    string vsam_emailid = "";   // ds.Tables[0].Rows[i][ds.Tables[0].Columns[13].ColumnName].ToString();
    string vssi_pro_cd = ds.Tables[0].Rows[i][ds.Tables[0].Columns[11].ColumnName].ToString();
    string vssi_pro_nm = ds.Tables[0].Rows[i][ds.Tables[0].Columns[12].ColumnName].ToString();
    string vssi_unit =  ds.Tables[0].Rows[i][ds.Tables[0].Columns[13].ColumnName].ToString();
    string vssi_qty = ds.Tables[0].Rows[i][ds.Tables[0].Columns[8].ColumnName].ToString();
    string vssi_frqty = ""; // ds.Tables[0].Rows[i][ds.Tables[0].Columns[14].ColumnName].ToString();
    string vssi_rate = ds.Tables[0].Rows[i][ds.Tables[0].Columns[9].ColumnName].ToString();
    string vsamt =  ds.Tables[0].Rows[i][ds.Tables[0].Columns[10].ColumnName].ToString();
    string vsPacking = ""; //ds.Tables[0].Rows[i][ds.Tables[0].Columns[12].ColumnName].ToString();



    float vnAmt;
    float vnRate;

    //vnAmt = (Convert.ToSingle(vsamt));  // *(Convert.ToSingle(vssi_rate));
    //vnRate = (Convert.ToSingle(vsamt)) / (Convert.ToSingle(vssi_qty));


    vnAmt = (Convert.ToSingle(vssi_qty)) * (Convert.ToSingle(vssi_rate));
    vnRate = (Convert.ToSingle(vssi_rate));

    //if (vssi_qty == '0'.ToString())
    //{
    //    vssi_qty = vssi_frqty;
    //    vssi_rate = "0".ToString();
    //}



    //MessageBox.Show(vsBillDate.ToString());
    vsINVDT = vsINVDT.Trim();
    vsINVDT = vsINVDT.Replace("12:00:00 AM", "");
    vsINVDT = vsINVDT.Replace("00:00:00", "");
    vsINVDT = vsINVDT.Trim();

    //   MessageBox.Show(vsINVDT);


    DateTime vsBDate = DateTime.ParseExact(vsINVDT, "dd/MM/yyyy", CultureInfo.InvariantCulture);
    //    MessageBox.Show(vsBDate.ToString());
    DateTime vsFDate = DateTime.ParseExact(svsFromDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
    DateTime vsTDate = DateTime.ParseExact(svsToDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);

    //MessageBox.Show(vsBDate.ToString());
    //MessageBox.Show(vsFDate.ToString());
    //MessageBox.Show(vsTDate.ToString());

    ////MessageBox.Show(vsBillNo);

    if (vsBDate >= vsFDate && vsBDate <= vsTDate)
    {

        //string conString = vsINVDT;

        //string[] splitString = conString.Split('/');

        //string result = splitString[1].ToString() + "/" + splitString[0].ToString() + "/" + splitString[2].ToString();


        // sw.WriteLine(vsINVNO.Trim() + "|" + vsINVDT.Trim() + " " + vsTIME.Trim() + "|" + vsCNAME.Trim() + "|" + vsCADD1.Trim() + " " + vsCADD2.Trim() + " " + vsCADD3.Trim() + vsCADD4.Trim() + "|" + vsCTNGST.Trim() + "|" + vsCPHONE.Trim() + "|" + "" + "|" + "Secondary Sales" + "|" + vsMDCODE.Trim() + "|" + vsMDNAME.Trim() + " " + vsPACKG.Trim() + "|" + "|" + "INR" + "|" + vsQTY.Trim() + "|" + vsRATE.Trim() + "|" + vsAmt.Trim() + "|");   // + vsINVNO.Trim() + "|"

        sw.WriteLine(vsINVSINO.Trim()  + "|" + vsINVSINO.Trim()  + "|" + vsINVDT.Trim() + "|" + vsam_name.Trim() + "|" + vsam_addr1.Trim() + " " + vsam_addr2.Trim() + " " + vsam_addr3.Trim() + " " + vsam_addr4.Trim() + "|" + vsam_tngstno.Trim() + "|" + vsam_cstno.Trim() + "|" + vsam_phone.Trim() + " " + vsam_rphone.Trim() + "|" + vsam_emailid.Trim() + "|" + "Secondary Purchase" + "|" + vssi_pro_cd.Trim() + "|" + vssi_pro_nm.Trim() + " " + vsPacking.Trim() + "|" + vssi_unit.Trim() + "|" + "INR" + "|" + vssi_qty.Trim() + "|" + vnRate.ToString().Trim() + "|" + vnAmt.ToString().Trim() + "|");   // + vsINVNO.Trim() + "|"


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

Я пробовал ConvertToInt, но все равно получаю ту же ошибку.

Richard MacCutchan

Посмотрите на фактическую строку, которую вы пытаетесь преобразовать, и вы сразу увидите, является ли она допустимым числом.

2 Ответов

Рейтинг:
2

phil.o

В сообщении об ошибке говорится, что либо vsamt, vssi_rate и-или vssi_qty переменные содержат значение, которое не может быть проанализировано до 32-битного значения с плавающей запятой.

Используя Convert класс часто является признаком плохо разработанного кода. Если вы хотите получить числовое значение из его строкового представления, вы всегда должны использовать TryParse метод соответствующего типа; это позволяет вам справиться с такого рода проблемой, с которой вы сталкиваетесь.

float amount, quantity, rate;
if (!float.TryParse(vsamt, out amount))
{
   // Handle here the case where vsamt is not a valid float representation
}
if (!float.TryParse(vssi_qty, out quantity))
{
   // Handle here the case where vssi_qty is not a valid float representation
}
if (!float.TryParse(vssi_rate, out rate))
{
   // Handle here the case where vssi_rate is not a valid float representation
}

Одиночный.Метод TryParse[^]


hussain.qudisia

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

phil.o

Вы не получаете ошибку, потому что vsamt равен нулю; вы получаете ошибку, потому что одно из значений не может быть проанализировано должным образом, что является чем-то совершенно другим.
Универсального решения вашего вопроса не существует, так как оно зависит от данных, которыми я сам не располагаю. Итак, вы должны написать свой код оборонительным способом (позволяя вам выявлять проблемы), как я привел вам пример, и отладить его, чтобы найти основную причину (что я не могу сделать, потому что у меня нет ни всего вашего проекта, ни данных, с которыми вы работаете). Вам нужна помощь в обработке сеанса отладки?

hussain.qudisia

Не могли бы вы помочь мне в отладке?

hussain.qudisia

Могу ли я использовать условие Nullif? Есть еще много значений в том, что есть 0 в vsamt.

Рейтинг:
0

F-ES Sitecore

В таком коде, как этот;

Convert.ToSingle(vssi_qty)


"vssi_qty" будет содержать значение, которое вы не можете преобразовать в Single. Либо вы думаете, что он должен быть способен анализировать до одного, и в этом случае вам нужно увидеть, откуда берется переменная, и исправить ее. Или это может быть нормально, что он не может быть проанализирован и должен быть по умолчанию равен 0, и в этом случае используйте TryParse. Или, может быть, вам нужно сделать некоторую дополнительную работу над vssi_qty, чтобы сделать его разбираемым на отдельные, такие как удаление забавных персонажей и т. д.

Сбросив 100 строк кода и даже не сказав, в какой строке происходит ошибка, мы не сможем вам помочь. Мы также не знаем ваших бизнес-правил, поэтому не знаем, какой из трех сценариев, описанных выше, является правильным для вас. Только вы можете отлаживать свои данные и решать эти вопросы.