技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

[解决] C# Parse小数提示FormatException:输入字符串的格式不正确

作者:admin    时间:2022-5-26 20:45:1    浏览:

今天在做项目的时候,遇到Parse小数抛出异常,提示FormatException:输入字符串的格式不正确。意思很明确,就是Parse不能用于小数转换,哪怕是小数点后面为0,例如100.00这样的数据格式。

C# Parse小数提示FormatException:输入字符串的格式不正确

遇到这个问题,我们可以有两种解决方法,一种是使用try{}catch(){}方法,另一种是使用TryParse代替Parse方法。

使用try{}catch(){}方法

这个方法比较传统,是任何程序预防抛出错误的普遍做法。

示例

try { 
    int.Parse("100.00");
}
catch (Exception ex) {
    Response.Write(ex.Message .ToString ());
}

输出

输入字符串的格式不正确。

我们可以根据catch的错误信息,或者有无catch错误,来判断程序是否执行成功,从而执行后面的程序语句。

使用TryParse方法

使用try{}catch(){}方法虽然能解决问题,但总觉得这样处理一个字符串转换数字不是最理想的方法。其实,我们有C#内置的方法来专门处理这个事情,那就是TryParse方法。

继续用上面的数据,使用TryParse方法这样处理。

string numberStr = "100.00";
int number;

bool isParsable = Int32.TryParse(numberStr, out number);
if (isParsable)
    Response.Write (number);
else
    Response.Write ("不能解析");

TryParse有两个功能,当解析成功时就直接返回转换值,当解析失败时就返回一个布尔值(truefalse),可谓一举两得,是字符串转换为 Int 的最安全方法

了解TryParse方法

在字符串转换为int的方法中,TryParse方法无疑是最好用的,如果你对此方法还了解得不够深入,那么看看下面的介绍。

描述

将数字的字符串表示形式转换为其等效的 32 位有符号整数。返回值指示转换是否成功。

public static bool TryParse (string? s, out int result);

参数

  • s String:要转换的数字的字符串。
  • result Int32:当此方法返回时,如果转换成功,则包含与s中包含的数字等效的 32 位有符号整数值,如果转换失败,则返回零。如果s参数为nullEmpty、格式不正确或表示小于MinValue或大于MaxValue的数字,则转换失败。此参数未初始化传递;最初提供的任何值result都将被覆盖。

返回

  • 布尔值:true,如果s转换成功;否则,false

例子

下面的示例使用许多不同的字符串值调用Int32.TryParse(String, Int32)方法。

using System;

public class Example
{
   public static void Main()
   {
      string[] values = { null, "160519", "9432.0", "16,667",
                          "   -322   ", "+4302", "(100);", "01FA" };
      foreach (var value in values)
      {
         int number;

         bool success = int.TryParse(value, out number);
         if (success)
         {
            Console.WriteLine($"Converted '{value}' to {number}.");
         }
         else
         {
            Console.WriteLine($"Attempted conversion of '{value ?? "<null>"}' failed.");
         }
      }
   }
}
// The example displays the following output:
// Attempted conversion of '<null>' failed.
// Converted '160519' to 160519.
// Attempted conversion of '9432.0' failed.
// Attempted conversion of '16,667' failed.
// Converted '   -322   ' to -322.
// Converted '+4302' to 4302.
// Attempted conversion of '(100);' failed.
// Attempted conversion of '01FA' failed.

TryParse(String, Int32)方法在此示例中无法转换的一些字符串是:

  • “9432.0”。转换失败,因为字符串不能包含小数分隔符;它必须只包含整数。
  • “16,667”。转换失败,因为字符串不能包含组分隔符;它必须只包含整数。
  • “(100)”。转换失败,因为字符串不能包含除当前区域性的NumberFormatInfo.NegativeSignNumberFormatInfo.NumberNegativePattern属性定义的负号之外的负号。
  • “01FA”。转换失败,因为字符串不能包含十六进制数字;它必须只包含十进制数字。 

评论

TryParse方法与Parse方法类似,只是TryParse方法在转换失败时不会抛出异常。它消除了在s无效且无法成功解析的事件中使用异常处理来测试FormatException的需要。

s参数包含多个形式:

[ws][sign]digits[ws]

方括号([ 和 ])中的项目是可选的。下表描述了每个元素。 

元素 描述
ws 可选的空白。
sign 可选标志。
digits 从 0 到 9 的数字序列。

s参数使用NumberStyles.Integer样式进行解释。除了十进制数字,只允许前导和尾随空格以及前导符号。要显式定义样式元素以及可以出现在s中的文化特定格式信息,请使用Int32.TryParse(String, NumberStyles, IFormatProvider, Int32)方法,请看文章详解C# TryParse怎样转换小数、16进制、千分位数字等字符串

TryParse方法的这种重载将s参数中的所有数字解释为十进制数字。要解析十六进制数字的字符串表示,请调用Int32.TryParse(String, NumberStyles, IFormatProvider, Int32)重载,请看文章详解C# TryParse怎样转换小数、16进制、千分位数字等字符串。 

总结

本文介绍了C# Parse小数提示FormatException:输入字符串的格式不正确的原因及解决方法,以及深入介绍了TryParse方法的用法。

参考文章

x
  • 站长推荐
/* 左侧显示文章内容目录 */