|
|
|
|
|
前面曾介紹過C# TryParse怎樣轉(zhuǎn)換小數(shù)、16進(jìn)制、千分位數(shù)字等字符串,不過那是用的int.tryParse
方法,并且轉(zhuǎn)換小數(shù)字符串時會受到諸多條件限制,其實(shí)如果要把數(shù)字字符串轉(zhuǎn)換成小數(shù),可以用single.tryParse
方法來處理,更加簡單。本文將詳細(xì)介紹如何使用single.tryParse
將數(shù)字的字符串表示形式轉(zhuǎn)換為其等效的單精度浮點(diǎn)數(shù)。
示例
在詳細(xì)介紹 single.tryParse
方法之前,我們先來看看該方法的一個示例。
以下示例使用TryParse(String, Single)
方法將數(shù)值的字符串表示形式轉(zhuǎn)換為Single
值。它假定 en-US 是當(dāng)前的文化。
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
方法轉(zhuǎn)換了多種形式的小數(shù)字符串。下面詳細(xì)介紹該方法。
single.tryParse 方法
將數(shù)字的字符串表示形式轉(zhuǎn)換為其等效的單精度浮點(diǎn)數(shù)。返回值指示轉(zhuǎn)換是成功還是失敗。
public static bool TryParse (string? s, out float result);
s
String:要轉(zhuǎn)換的數(shù)字的字符串。result
Single:當(dāng)此方法返回時,如果轉(zhuǎn)換成功,則包含與s
中包含的數(shù)字等效的單精度浮點(diǎn)數(shù),如果轉(zhuǎn)換失敗,則返回零。如果s
參數(shù)為null或Empty、格式不正確或表示小于MinValue或大于MaxValue的數(shù)字,則轉(zhuǎn)換失敗。此參數(shù)未初始化傳遞;最初提供的任何值result
都將被覆蓋。布爾值:true,如果s
轉(zhuǎn)換成功;否則,false。
在 .NET Core 3.0 及更高版本中,太大而無法表示的值會按照 IEEE 754 規(guī)范的要求四舍五入為PositiveInfinity
或NegativeInfinity
。在包括 .NET Framework 在內(nèi)的早期版本中,解析太大而無法表示的值會導(dǎo)致失敗。
此重載與Single.Parse(String)
方法的不同之處在于返回一個布爾值,該值指示解析操作是否成功,而不是返回解析后的數(shù)值。它消除了在s
無效且無法成功解析的事件中使用異常處理來測試FormatException的需要。
s
參數(shù)可以包含PositiveInfinitySymbol
、NegativeInfinitySymbol
、NaNSymbol
(字符串比較區(qū)分大小寫)或以下形式的字符串:
[ws][sign][integral-digits,]integral-digits[.[fractional-digits]][e[sign]exponential-digits][ws]
方括號中的元素是可選的。下表描述了每個元素。
元素 | 描述 |
---|---|
ws | 一系列空白字符。 |
sign | 負(fù)號或正號符號。 |
integral-digits | 一系列從 0 到 9 的數(shù)字字符,用于指定數(shù)字的整數(shù)部分。如果有小數(shù)位,則可以不存在整數(shù)位。 |
, | 特定于區(qū)域性的組分隔符。 |
. | 特定于文化的小數(shù)點(diǎn)符號。 |
fractional-digits | 一系列從 0 到 9 的數(shù)字字符,用于指定數(shù)字的小數(shù)部分。 |
E | 大寫或小寫字符“e”,表示指數(shù)(科學(xué))表示法。 |
exponential-digits | 一系列從 0 到 9 的數(shù)字字符,用于指定指數(shù)。 |
s
參數(shù)使用NumberStyles.Float
和NumberStyles.AllowThousands
標(biāo)志的組合進(jìn)行解釋。這意味著允許使用空格和千位分隔符,但不允許使用貨幣符號。要顯式定義可以出現(xiàn)在s
中的元素(例如貨幣符號、千位分隔符和空格),請使用TryParse(String, NumberStyles, IFormatProvider, Single)
方法重載。
使用為當(dāng)前系統(tǒng)區(qū)域性初始化的NumberFormatInfo
對象中的格式信息解析s
參數(shù)。有關(guān)詳細(xì)信息,請參閱NumberFormatInfo.CurrentInfo
。要使用某些其他指定區(qū)域性的格式信息解析字符串,請使用TryParse(String, NumberStyles, IFormatProvider, Single)
方法重載。
如果s
超出Single
數(shù)據(jù)類型的范圍,則該方法在 .NET Framework 和 .NET Core 2.2 及更早版本上返回false。在 .NET Core 3.0 及更高版本上,如果s
小于Single.MinValue
則返回Single.NegativeInfinity
,如果s
大于Single.MaxValue
則返回Single.PositiveInfinity
。
如果在解析操作過程中在s
參數(shù)中遇到分隔符,并且適用的貨幣或數(shù)字小數(shù)和組分隔符相同,則解析操作假定分隔符是小數(shù)分隔符而不是組分隔符。有關(guān)分隔符的詳細(xì)信息,請參閱CurrencyDecimalSeparator
、NumberDecimalSeparator
、CurrencyGroupSeparator
和NumberGroupSeparator
。
總結(jié)
本文通過具體示例,詳細(xì)介紹了C# single.tryParse
將數(shù)字字符串轉(zhuǎn)換為浮點(diǎn)數(shù)的方法,通過該文的學(xué)習(xí),我們應(yīng)了解使用single.tryParse
轉(zhuǎn)換字符串時的一些規(guī)則,這在實(shí)際編程中相當(dāng)重要,因?yàn)槭褂檬欠竦卯?dāng)關(guān)系到你是否能得到預(yù)期的結(jié)果。
參考文章