C#,输入字符串的格式不正确,十进制值
Posted
技术标签:
【中文标题】C#,输入字符串的格式不正确,十进制值【英文标题】:C#, Input string was not in the correct format, decimal value 【发布时间】:2017-01-08 23:04:31 【问题描述】:我正在尝试创建一个简单的计算,用户输入一个值“kWh”,它会输出“ChargeAmount”
但是,我在将 ChargeAmount 转换为十进制值时遇到问题,并且收到错误消息“输入字符串的格式不正确”。我可以在调试器中手动更改 ChargeAmount 的值,然后继续执行程序,这将正确输出 ChargeAmount。所以我认为错误与十进制转换有关。
我的代码中有什么地方做错了吗?
谢谢!
private decimal CCustMethod()
decimal kWh = Convert.ToDecimal(txtkWh.Text);
decimal ChargeAmount = Convert.ToDecimal(txtChargeAmount.Text);
if (radCommercial.Checked) //User checks on Commercial
if (kWh < 1000m) //Calculation for first 1000 kWh used
ChargeAmount = 60.0m;
else//Calculation when over 1000 kWh usage
ChargeAmount = (kWh - 1000) * 0.045m + 60.0m;
txtChargeAmount.Text = string.Format("0:C2", ChargeAmount); //Convert Flat Rate into format
return ChargeAmount;
【问题讨论】:
您在 txtkWh 框中输入了什么?关于这一点有成千上万的问题,所有这些都归结为一个简单的事实。根据操作系统的本地化规则,您提供的输入不能转换为小数(或整数、浮点数、日期时间等...) 我输入任何十进制值,以“5.6”为例 如果您居住的国家/地区使用不同的东西作为数字的整数和小数部分之间的分隔符,则它不能转换为小数 Problem parsing currency text to decimal type的可能重复 非常感谢!是 $ 导致该值无法转换 【参考方案1】:你可以试试这样的:
System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
customCulture.NumberFormat.NumberDecimalSeparator = ".";
System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
或者类似的东西:
using System.Globalization;
CultureInfo culture = new CultureInfo("en-US");
Convert.ToDecimal(value, culture);
所以在你的情况下,它可能只是:
decimal ChargeAmount = Convert.ToDecimal(txtChargeAmount.Text,new CultureInfo("en-US"));
【讨论】:
CultureInfo.InvariantCulture以上是关于C#,输入字符串的格式不正确,十进制值的主要内容,如果未能解决你的问题,请参考以下文章
MySQL DateTime 的 C# 输入字符串格式不正确