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# 输入字符串格式不正确

无法在 C# 中反序列化 JSON 结果。输入字符串格式不正确错误

输入字符串的格式不正确

如何将String / char格式化为十六进制值正确

输入字符串在 double.Parse 中的格式不正确

对十进制数使用自定义字符串格式c#