将字符串解析为十进制会引发 DateTime 的 FormatException
Parsing string to decimal throws a FormatException for DateTime
我有一个包含不同工具数据的 Web 项目,我能够将工具插入和删除到 RadGrid(连接到数据库)中,但我在使用编辑命令时遇到问题
工具的一个值是 "Cost",它是十进制的,当我尝试编辑时,有一半的时间它会给我这个错误:
"Input String was not in correct format error"
当用户点击编辑表单模式提交编辑时,这是我的编辑方法
protected void btnMdlEditar_OnClick(object sender, EventArgs e)
{
NumberStyles style;
CultureInfo provider;
style = NumberStyles.AllowDecimalPoint;
provider = new CultureInfo("en-US");
decimal costoDecimal;
var costo = editCosto.Text;
costoDecimal = decimal.Parse(costo.ToString(),style,provider);
try
{
var id = CDatos.DHerramientas.UpdateHerramientas(int.Parse(txtId.Text), editCodigo.Text, editNombreCorto.Text, editDescripcion.Text, costoDecimal, editConsumible.Text);
rgHerramientas.DataBind();
rgHerramientas.Rebind();
upHerramientas.Update();
this.ShowMessage(Resources.Language.mess_insert, "success");
}
catch (Exception ex) { this.ShowMessage(ex.Message, "danger"); }
this.CloseModal("mdlHerramientaEdit");
}
在行
costoDecimal = decimal.Parse(costo.ToString(),style,provider);
是我收到错误的地方,弹出 FormatException,指出在将字符串解析为 DataTime 时出现问题,出于某种原因。
我不知道为什么在我的插入方法
中使用确切的代码从字符串中解析小数时会出现此错误
protected void btnAutorizar_OnClick(object sender, EventArgs e)
{
NumberStyles style;
CultureInfo provider;
style = NumberStyles.AllowDecimalPoint;
provider = new CultureInfo("en-US");
decimal costoDecimal;
var costo = txtCosto.Text;
costoDecimal = decimal.Parse(costo.ToString(),style,provider);
try
{
var id = CDatos.DHerramientas.InsertHerramientas(txtCodigo.Text, txtNombreCorto.Text, txtDescripcion.Text, costoDecimal, txtConsumible.Text);
this.upDatos.Update();
this.ShowMessage(Resources.Language.mess_insert, "success");
}
catch (Exception ex){this.ShowMessage(ex.Message, "danger"); }
this.CloseModal("mdlHerramienta");
}
当我通过仅删除部分数字或未更改数字来编辑数据时会抛出错误,但如果我完全删除数字并输入另一个十进制数字,它允许我编辑它
7.85 to 7.89 = Error
7.85 to 6.12 = No error
我已经有了
using System.Globalization;
我现在的文化是"es-ES"
编辑:
我试图从
中删除 "provider"
costoDecimal = decimal.Parse(costo.ToString(), style, provider);
which allows me to edit succesfully if I only change part of the number, but if I type a new number using "." it throws me the error again
我认为问题在于使用“.”。而不是“,”这是西班牙用于小数的方法,有没有办法同时使用“。”和“,”?
知道了,问题的根源是使用“,”而不是“.”
由于我项目的性质,我必须将文化用作整个项目的 "es-ES"。
如果是“.”使用而不是“,”它抛出错误,以便用户能够使用“。”和系统使用“,”我不得不改变代码
protected void btnMdlEditar_OnClick(object sender, EventArgs e)
{
NumberStyles style;
CultureInfo provider;
style = NumberStyles.AllowDecimalPoint;
provider = new CultureInfo("en-US");
decimal costoDecimal = 0;
var costo = editCosto.Text;
if (editCosto.Text.Contains("."))
{
costoDecimal = decimal.Parse(costo.ToString(), style, provider);
}
else if (editCosto.Text.Contains(","))
{
costoDecimal = decimal.Parse(costo.ToString(), style);
}
try
{
var id = CDatos.DHerramientas.UpdateHerramientas(int.Parse(txtId.Text), editCodigo.Text, editNombreCorto.Text, editDescripcion.Text, costoDecimal, editConsumible.Text);
rgHerramientas.DataBind();
rgHerramientas.Rebind();
upHerramientas.Update();
this.ShowMessage(Resources.Language.mess_insert, "success");
}
catch (Exception ex) { this.ShowMessage(ex.Message, "danger"); }
this.CloseModal("mdlHerramientaEdit");
}
根据“,”或“.”更改区域性被使用
我有一个包含不同工具数据的 Web 项目,我能够将工具插入和删除到 RadGrid(连接到数据库)中,但我在使用编辑命令时遇到问题
工具的一个值是 "Cost",它是十进制的,当我尝试编辑时,有一半的时间它会给我这个错误:
"Input String was not in correct format error"
当用户点击编辑表单模式提交编辑时,这是我的编辑方法
protected void btnMdlEditar_OnClick(object sender, EventArgs e)
{
NumberStyles style;
CultureInfo provider;
style = NumberStyles.AllowDecimalPoint;
provider = new CultureInfo("en-US");
decimal costoDecimal;
var costo = editCosto.Text;
costoDecimal = decimal.Parse(costo.ToString(),style,provider);
try
{
var id = CDatos.DHerramientas.UpdateHerramientas(int.Parse(txtId.Text), editCodigo.Text, editNombreCorto.Text, editDescripcion.Text, costoDecimal, editConsumible.Text);
rgHerramientas.DataBind();
rgHerramientas.Rebind();
upHerramientas.Update();
this.ShowMessage(Resources.Language.mess_insert, "success");
}
catch (Exception ex) { this.ShowMessage(ex.Message, "danger"); }
this.CloseModal("mdlHerramientaEdit");
}
在行
costoDecimal = decimal.Parse(costo.ToString(),style,provider);
是我收到错误的地方,弹出 FormatException,指出在将字符串解析为 DataTime 时出现问题,出于某种原因。 我不知道为什么在我的插入方法
中使用确切的代码从字符串中解析小数时会出现此错误protected void btnAutorizar_OnClick(object sender, EventArgs e)
{
NumberStyles style;
CultureInfo provider;
style = NumberStyles.AllowDecimalPoint;
provider = new CultureInfo("en-US");
decimal costoDecimal;
var costo = txtCosto.Text;
costoDecimal = decimal.Parse(costo.ToString(),style,provider);
try
{
var id = CDatos.DHerramientas.InsertHerramientas(txtCodigo.Text, txtNombreCorto.Text, txtDescripcion.Text, costoDecimal, txtConsumible.Text);
this.upDatos.Update();
this.ShowMessage(Resources.Language.mess_insert, "success");
}
catch (Exception ex){this.ShowMessage(ex.Message, "danger"); }
this.CloseModal("mdlHerramienta");
}
当我通过仅删除部分数字或未更改数字来编辑数据时会抛出错误,但如果我完全删除数字并输入另一个十进制数字,它允许我编辑它
7.85 to 7.89 = Error
7.85 to 6.12 = No error
我已经有了
using System.Globalization;
我现在的文化是"es-ES"
编辑: 我试图从
中删除 "provider"costoDecimal = decimal.Parse(costo.ToString(), style, provider); which allows me to edit succesfully if I only change part of the number, but if I type a new number using "." it throws me the error again
我认为问题在于使用“.”。而不是“,”这是西班牙用于小数的方法,有没有办法同时使用“。”和“,”?
知道了,问题的根源是使用“,”而不是“.”
由于我项目的性质,我必须将文化用作整个项目的 "es-ES"。
如果是“.”使用而不是“,”它抛出错误,以便用户能够使用“。”和系统使用“,”我不得不改变代码
protected void btnMdlEditar_OnClick(object sender, EventArgs e)
{
NumberStyles style;
CultureInfo provider;
style = NumberStyles.AllowDecimalPoint;
provider = new CultureInfo("en-US");
decimal costoDecimal = 0;
var costo = editCosto.Text;
if (editCosto.Text.Contains("."))
{
costoDecimal = decimal.Parse(costo.ToString(), style, provider);
}
else if (editCosto.Text.Contains(","))
{
costoDecimal = decimal.Parse(costo.ToString(), style);
}
try
{
var id = CDatos.DHerramientas.UpdateHerramientas(int.Parse(txtId.Text), editCodigo.Text, editNombreCorto.Text, editDescripcion.Text, costoDecimal, editConsumible.Text);
rgHerramientas.DataBind();
rgHerramientas.Rebind();
upHerramientas.Update();
this.ShowMessage(Resources.Language.mess_insert, "success");
}
catch (Exception ex) { this.ShowMessage(ex.Message, "danger"); }
this.CloseModal("mdlHerramientaEdit");
}
根据“,”或“.”更改区域性被使用