|
|
|
|
|
|
前面曾介紹過C# TryParse怎樣轉換小數、16進制、千分位數字等字符串,不過那是用的int.tryParse方法,并且轉換小數字符串時會受到諸多條件限制,其實如果要把數字字符串轉換成小數,可以用single.tryParse方法來處理,更加簡單。本文將詳細介紹如何使用single.tryParse將數字的字符串表示形式轉換為其等效的單精度浮點數。
示例
在詳細介紹 single.tryParse 方法之前,我們先來看看該方法的一個示例。
以下示例使用TryParse(String, Single)方法將數值的字符串表示形式轉換為Single值。它假定 en-US 是當前的文化。
string value;
float number;
// Parse a floating-point value with a thousands separator.
value = "1,643.57";
if (Single.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("Unable to parse '{0}'.", value);
// Parse a floating-point value with a currency symbol and a
// thousands separator.
value = "$1,643.57";
if (Single.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("Unable to parse '{0}'.", value);
// Parse value in exponential notation.
value = "-1.643e6";
if (Single.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("Unable to parse '{0}'.", value);
// Parse a negative integer value.
value = "-168934617882109132";
if (Single.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("Unable to parse '{0}'.", value);
// The example displays the following output:
// 1643.57
// Unable to parse '$1,643.57'.
// -164300
// -1.689346E+17
該示例中,使用 single.tryParse 方法轉換了多種形式的小數字符串。下面詳細介紹該方法。
single.tryParse 方法
將數字的字符串表示形式轉換為其等效的單精度浮點數。返回值指示轉換是成功還是失敗。
public static bool TryParse (string? s, out float result);
s String:要轉換的數字的字符串。result Single:當此方法返回時,如果轉換成功,則包含與s中包含的數字等效的單精度浮點數,如果轉換失敗,則返回零。如果s參數為null或Empty、格式不正確或表示小于MinValue或大于MaxValue的數字,則轉換失敗。此參數未初始化傳遞;最初提供的任何值result都將被覆蓋。布爾值:true,如果s轉換成功;否則,false。
在 .NET Core 3.0 及更高版本中,太大而無法表示的值會按照 IEEE 754 規范的要求四舍五入為PositiveInfinity或NegativeInfinity 。在包括 .NET Framework 在內的早期版本中,解析太大而無法表示的值會導致失敗。
此重載與Single.Parse(String)方法的不同之處在于返回一個布爾值,該值指示解析操作是否成功,而不是返回解析后的數值。它消除了在s無效且無法成功解析的事件中使用異常處理來測試FormatException的需要。
s參數可以包含PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol(字符串比較區分大小寫)或以下形式的字符串:
[ws][sign][integral-digits,]integral-digits[.[fractional-digits]][e[sign]exponential-digits][ws]
方括號中的元素是可選的。下表描述了每個元素。
| 元素 | 描述 |
|---|---|
| ws | 一系列空白字符。 |
| sign | 負號或正號符號。 |
| integral-digits | 一系列從 0 到 9 的數字字符,用于指定數字的整數部分。如果有小數位,則可以不存在整數位。 |
| , | 特定于區域性的組分隔符。 |
| . | 特定于文化的小數點符號。 |
| fractional-digits | 一系列從 0 到 9 的數字字符,用于指定數字的小數部分。 |
| E | 大寫或小寫字符“e”,表示指數(科學)表示法。 |
| exponential-digits | 一系列從 0 到 9 的數字字符,用于指定指數。 |
s參數使用NumberStyles.Float和NumberStyles.AllowThousands標志的組合進行解釋。這意味著允許使用空格和千位分隔符,但不允許使用貨幣符號。要顯式定義可以出現在s中的元素(例如貨幣符號、千位分隔符和空格),請使用TryParse(String, NumberStyles, IFormatProvider, Single)方法重載。
使用為當前系統區域性初始化的NumberFormatInfo對象中的格式信息解析s參數。有關詳細信息,請參閱NumberFormatInfo.CurrentInfo。要使用某些其他指定區域性的格式信息解析字符串,請使用TryParse(String, NumberStyles, IFormatProvider, Single)方法重載。
如果s超出Single數據類型的范圍,則該方法在 .NET Framework 和 .NET Core 2.2 及更早版本上返回false。在 .NET Core 3.0 及更高版本上,如果s小于Single.MinValue則返回Single.NegativeInfinity ,如果s大于Single.MaxValue則返回Single.PositiveInfinity。
如果在解析操作過程中在s參數中遇到分隔符,并且適用的貨幣或數字小數和組分隔符相同,則解析操作假定分隔符是小數分隔符而不是組分隔符。有關分隔符的詳細信息,請參閱CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator和NumberGroupSeparator。
總結
本文通過具體示例,詳細介紹了C# single.tryParse將數字字符串轉換為浮點數的方法,通過該文的學習,我們應了解使用single.tryParse轉換字符串時的一些規則,這在實際編程中相當重要,因為使用是否得當關系到你是否能得到預期的結果。
參考文章
