Double.TryParse メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
数値の文字列形式を、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。
オーバーロード
| 名前 | 説明 |
|---|---|
| TryParse(String, IFormatProvider, Double) |
文字列を値に解析しようとします。 |
| TryParse(ReadOnlySpan<Char>, Double) |
指定したスタイルおよびカルチャ固有の形式の数値のスパン表現を、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。 |
| TryParse(String, Double) |
数値の文字列形式を、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。 |
| TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double) |
UTF-8 文字のスパンを値に解析しようとします。 |
| TryParse(ReadOnlySpan<Char>, IFormatProvider, Double) |
文字のスパンを値に解析しようとします。 |
| TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double) |
UTF-8 文字のスパンを値に解析しようとします。 |
| TryParse(ReadOnlySpan<Byte>, Double) |
数値の文字列形式を含む UTF-8 文字スパンを、等価の倍精度浮動小数点数に変換しようとします。 |
| TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double) |
指定したスタイルおよびカルチャ固有の形式の数値の文字列形式を含む文字スパンを、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。 |
| TryParse(String, NumberStyles, IFormatProvider, Double) |
指定したスタイルおよびカルチャ固有の形式の数値の文字列形式を、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。 |
注釈
.NET Core 3.0 以降では、IEEE 754 仕様で必要に応じて、大きすぎる値は PositiveInfinity または NegativeInfinity に丸められます。 以前のバージョン (.NET Framework を含む) では、大きすぎる値を解析するとエラーが発生しました。
TryParse(String, IFormatProvider, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
文字列を値に解析しようとします。
public:
static bool TryParse(System::String ^ s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = IParsable<double>::TryParse;
public static bool TryParse(string? s, IFormatProvider? provider, out double result);
static member TryParse : string * IFormatProvider * double -> bool
Public Shared Function TryParse (s As String, provider As IFormatProvider, ByRef result As Double) As Boolean
パラメーター
- s
- String
解析する文字列。
- provider
- IFormatProvider
sに関するカルチャ固有の書式設定情報を提供するオブジェクト。
- result
- Double
このメソッドから制御が戻るときに、正常に s 解析された結果または失敗した場合の未定義の値が格納されます。
返品
true
sが正常に解析された場合は。それ以外の場合はfalse。
適用対象
TryParse(ReadOnlySpan<Char>, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
指定したスタイルおよびカルチャ固有の形式の数値のスパン表現を、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。
public:
static bool TryParse(ReadOnlySpan<char> s, [Runtime::InteropServices::Out] double % result);
public static bool TryParse(ReadOnlySpan<char> s, out double result);
static member TryParse : ReadOnlySpan<char> * double -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), ByRef result As Double) As Boolean
パラメーター
- s
- ReadOnlySpan<Char>
変換する数値の文字列形式を含む文字スパン。
- result
- Double
このメソッドから制御が戻るときに、変換に成功した場合は、 s パラメーターに含まれる数値または記号に相当する倍精度浮動小数点数が格納されます。変換に失敗した場合は 0 が格納されます。
s パラメーターがnullまたは空の場合、変換は失敗します。
sが Double.MinValue より小さい有効な数値である場合、resultはNegativeInfinity。
sが Double.MaxValue より大きい有効な数値である場合、resultはPositiveInfinity。 このパラメーターは初期化されていない状態で渡されます。 result で最初に指定された値は上書きされます。
返品
注釈
.NET Core 3.0 以降では、IEEE 754 仕様で必要に応じて、大きすぎる値は PositiveInfinity または NegativeInfinity に丸められます。 以前のバージョン (.NET Framework を含む) では、大きすぎる値を解析するとエラーが発生しました。
適用対象
TryParse(String, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
数値の文字列形式を、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。
public:
static bool TryParse(System::String ^ s, [Runtime::InteropServices::Out] double % result);
public static bool TryParse(string s, out double result);
public static bool TryParse(string? s, out double result);
static member TryParse : string * double -> bool
Public Shared Function TryParse (s As String, ByRef result As Double) As Boolean
パラメーター
- s
- String
変換する数値を含む文字列。
- result
- Double
このメソッドから制御が戻るときに、変換に成功した場合は、 s パラメーターと等価の倍精度浮動小数点数を格納し、変換に失敗した場合は 0 を格納します。
s パラメーターがnullまたはEmptyであるか、有効な形式の数値でない場合、変換は失敗します。 また、 s が Double.MinValue 未満または Double.MaxValue より大きい数値を表している場合、.NET Framework でも失敗します。 このパラメーターは初期化されていない状態で渡されます。 result で最初に指定された値は上書きされます。
返品
例
次の例では、 TryParse(String, Double) メソッドを使用して、数値の文字列形式を Double 値に変換します。 en-US が現在のカルチャであることを前提としています。
using System;
public class Example
{
public static void Main()
{
string[] values = { "1,643.57", "$1,643.57", "-1.643e6",
"-168934617882109132", "123AE6",
null, String.Empty, "ABCDEF" };
double number;
foreach (var value in values) {
if (Double.TryParse(value, out number))
Console.WriteLine("'{0}' --> {1}", value, number);
else
Console.WriteLine("Unable to parse '{0}'.", value);
}
}
}
// The example displays the following output:
// '1,643.57' --> 1643.57
// Unable to parse '$1,643.57'.
// '-1.643e6' --> -1643000
// '-168934617882109132' --> -1.68934617882109E+17
// Unable to parse '123AE6'.
// Unable to parse ''.
// Unable to parse ''.
// Unable to parse 'ABCDEF'.
open System
let values =
[| "1,643.57"; "$1,643.57"; "-1.643e6"
"-168934617882109132"; "123AE6"
null; String.Empty; "ABCDEF" |]
for value in values do
match Double.TryParse value with
| true, number ->
printfn $"'{value}' --> {number}"
| _ ->
printfn $"Unable to parse '{value}'."
// The example displays the following output:
// '1,643.57' --> 1643.57
// Unable to parse '$1,643.57'.
// '-1.643e6' --> -1643000
// '-168934617882109132' --> -1.68934617882109E+17
// Unable to parse '123AE6'.
// Unable to parse ''.
// Unable to parse ''.
// Unable to parse 'ABCDEF'.
Module Example
Public Sub Main()
Dim values() As String = { "1,643.57", "$1,643.57", "-1.643e6",
"-168934617882109132", "123AE6",
Nothing, String.Empty, "ABCDEF" }
Dim number As Double
For Each value In values
If Double.TryParse(value, number) Then
Console.WriteLine("'{0}' --> {1}", value, number)
Else
Console.WriteLine("Unable to parse '{0}'.", value)
End If
Next
End Sub
End Module
' The example displays the following output:
' '1,643.57' --> 1643.57
' Unable to parse '$1,643.57'.
' '-1.643e6' --> -1643000
' '-168934617882109132' --> -1.68934617882109E+17
' Unable to parse '123AE6'.
' Unable to parse ''.
' Unable to parse ''.
' Unable to parse 'ABCDEF'.
注釈
.NET Core 3.0 以降では、IEEE 754 仕様で必要に応じて、大きすぎる値は PositiveInfinity または NegativeInfinity に丸められます。 以前のバージョン (.NET Framework を含む) では、大きすぎる値を解析するとエラーが発生しました。
このオーバーロードは、解析された数値を返す代わりに解析操作が成功したかどうかを示すブール値を返すことによって、 Double.Parse(String) メソッドとは異なります。 これにより、FormatExceptionが無効であり、正常に解析できない場合に、例外処理を使用してsをテストする必要がなくなります。
s パラメーターには、現在のカルチャのNumberFormatInfo.PositiveInfinitySymbol、NumberFormatInfo.NegativeInfinitySymbol、またはNumberFormatInfo.NaNSymbolシンボルを含めることができます。 この文字列比較は、.NET Core 3.0 以降のバージョンでは大文字と小文字は区別されませんが、.NET Framework を含む以前のバージョンでは大文字と小文字が区別されます。
s パラメーターには、次の形式の文字列を指定することもできます。
[ws][sign][整数桁,]整数桁[.[fractional-digits]][e[sign]exponential-digits][ws]
角かっこ内の要素は省略可能です。 次の表では、各要素について説明します。
| 要素 | 形容 |
|---|---|
| ws | 一連の空白文字。 |
| サイン | 負符号または正符号記号。 |
| 整数桁 | 数値の整数部分を指定する 0 から 9 までの一連の数値。 整数桁は、小数部が存在する場合は使用できません。 |
| , | カルチャ固有のグループ区切り記号。 |
| . | カルチャ固有の小数点記号。 |
| fractional-digits | 数値の小数部を指定する 0 から 9 までの一連の数値。 |
| E | 指数 (指数) 表記を示す大文字または小文字の 'e' です。 |
| exponential-digits | 指数を指定する 0 から 9 までの一連の数値。 |
数値書式の詳細については、「 型の書式設定」を参照してください。
s パラメーターは、NumberStyles.FloatフラグとNumberStyles.AllowThousands フラグの組み合わせを使用して解釈されます。 つまり、空白と桁区切り記号は使用できますが、通貨記号は使用できません。
sに存在できる要素 (通貨記号、桁区切り記号、空白など) を明示的に定義するには、Double.TryParse(String, NumberStyles, IFormatProvider, Double) メソッドのオーバーロードを使用します。
s パラメーターは、現在のシステム カルチャ用に初期化されたNumberFormatInfo オブジェクトの書式設定情報を使用して解析されます。 詳細については、NumberFormatInfo.CurrentInfoを参照してください。 他の指定されたカルチャの書式設定情報を使用して文字列を解析するには、 Double.TryParse(String, NumberStyles, IFormatProvider, Double) メソッドのオーバーロードを使用します。
通常、Double.TryParse メソッドを呼び出して作成された文字列をDouble.ToString メソッドに渡すと、元のDouble値が返されます。 ただし、精度が失われるため、値が等しくない可能性があります。 さらに、 Double.MinValue または Double.MaxValue の文字列形式を解析しようとすると、ラウンド トリップに失敗します。 .NET Framework では、 OverflowExceptionがスローされます。 .NET Core 3.0 以降のバージョンでは、MinValueを解析しようとするとDouble.NegativeInfinityが返され、MaxValue解析しようとするとDouble.PositiveInfinityが返されます。 次の例では、図を示します。
using System;
public class Example
{
public static void Main()
{
string value;
double number;
value = Double.MinValue.ToString();
if (Double.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("{0} is outside the range of a Double.",
value);
value = Double.MaxValue.ToString();
if (Double.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("{0} is outside the range of a Double.",
value);
}
}
// The example displays the following output:
// -1.79769313486232E+308 is outside the range of the Double type.
// 1.79769313486232E+308 is outside the range of the Double type.
open System
[<EntryPoint>]
let main _ =
let value = string Double.MinValue
match Double.TryParse value with
| true, number ->
printfn $"{number}"
| _ ->
printfn $"{value} is outside the range of a Double."
let value = string Double.MaxValue
match Double.TryParse value with
| true, number ->
printfn $"{number}"
| _ ->
printfn $"{value} is outside the range of a Double."
0
// The example displays the following output:
// -1.79769313486232E+308 is outside the range of the Double type.
// 1.79769313486232E+308 is outside the range of the Double type.
Module Example
Public Sub Main()
Dim value As String
Dim number As Double
value = Double.MinValue.ToString()
If Double.TryParse(value, number) Then
Console.WriteLine(number)
Else
Console.WriteLine("{0} is outside the range of a Double.", _
value)
End If
value = Double.MaxValue.ToString()
If Double.TryParse(value, number) Then
Console.WriteLine(number)
Else
Console.WriteLine("{0} is outside the range of a Double.", _
value)
End If
End Sub
End Module
' The example displays the following output:
' -1.79769313486232E+308 is outside the range of the Double type.
' 1.79769313486232E+308 is outside the range of the Double type.
.NET Framework では、 s が Double データ型の範囲外の場合、 TryParse(String, Double) メソッドは OverflowExceptionをスローします。
.NET Core 3.0 以降のバージョンでは、 s が Double データ型の範囲外である場合、例外はスローされません。 ほとんどの場合、 TryParse(String, Double) メソッドは、 Double.PositiveInfinity または Double.NegativeInfinityの結果を計算します。 ただし、正または負の無限大よりも Double の最大値または最小値に近いと見なされる小さな値のセットがあります。 このような場合、メソッドは Double.MaxValue または Double.MinValueの結果を計算します。
解析操作中に s パラメーターで区切り記号が検出され、小数点区切り記号とグループ区切り記号が同じである場合、解析操作では、区切り記号がグループ区切り記号ではなく小数点であると見なされます。 区切り記号の詳細については、「 CurrencyDecimalSeparator、 NumberDecimalSeparator、 CurrencyGroupSeparator、および NumberGroupSeparator」を参照してください。
こちらもご覧ください
- Parse(String)
- ToString()
- .NET での数値文字列の解析
- サンプル: .NET Core WinForms 書式設定ユーティリティ (C#)
- サンプル: .NET Core WinForms 書式設定ユーティリティ (Visual Basic)
適用対象
TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
UTF-8 文字のスパンを値に解析しようとします。
public:
static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = IUtf8SpanParsable<double>::TryParse;
public static bool TryParse(ReadOnlySpan<byte> utf8Text, IFormatProvider? provider, out double result);
static member TryParse : ReadOnlySpan<byte> * IFormatProvider * double -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), provider As IFormatProvider, ByRef result As Double) As Boolean
パラメーター
- utf8Text
- ReadOnlySpan<Byte>
解析する UTF-8 文字のスパン。
- provider
- IFormatProvider
utf8Textに関するカルチャ固有の書式設定情報を提供するオブジェクト。
- result
- Double
戻り値には、 utf8Text が正常に解析された結果、または失敗した場合に未定義の値が含まれます。
返品
true
utf8Textが正常に解析された場合は。それ以外の場合はfalse。
適用対象
TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
文字のスパンを値に解析しようとします。
public:
static bool TryParse(ReadOnlySpan<char> s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = ISpanParsable<double>::TryParse;
public static bool TryParse(ReadOnlySpan<char> s, IFormatProvider? provider, out double result);
static member TryParse : ReadOnlySpan<char> * IFormatProvider * double -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), provider As IFormatProvider, ByRef result As Double) As Boolean
パラメーター
- s
- ReadOnlySpan<Char>
解析する文字のスパン。
- provider
- IFormatProvider
sに関するカルチャ固有の書式設定情報を提供するオブジェクト。
- result
- Double
このメソッドから制御が戻るときに、 sの解析に成功した結果、または失敗した場合は未定義の値が格納されます。
返品
true
sが正常に解析された場合は。それ以外の場合はfalse。
適用対象
TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
UTF-8 文字のスパンを値に解析しようとします。
public:
static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = System::Numerics::INumberBase<double>::TryParse;
public static bool TryParse(ReadOnlySpan<byte> utf8Text, System.Globalization.NumberStyles style, IFormatProvider? provider, out double result);
static member TryParse : ReadOnlySpan<byte> * System.Globalization.NumberStyles * IFormatProvider * double -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), style As NumberStyles, provider As IFormatProvider, ByRef result As Double) As Boolean
パラメーター
- utf8Text
- ReadOnlySpan<Byte>
解析する UTF-8 文字のスパン。
- style
- NumberStyles
utf8Textに存在できる数値スタイルのビットごとの組み合わせ。
- provider
- IFormatProvider
utf8Textに関するカルチャ固有の書式設定情報を提供するオブジェクト。
- result
- Double
戻り値には、 utf8Text が正常に解析された結果、または失敗した場合に未定義の値が含まれます。
返品
true
utf8Textが正常に解析された場合は。それ以外の場合はfalse。
適用対象
TryParse(ReadOnlySpan<Byte>, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
数値の文字列形式を含む UTF-8 文字スパンを、等価の倍精度浮動小数点数に変換しようとします。
public:
static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, [Runtime::InteropServices::Out] double % result);
public static bool TryParse(ReadOnlySpan<byte> utf8Text, out double result);
static member TryParse : ReadOnlySpan<byte> * double -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), ByRef result As Double) As Boolean
パラメーター
- utf8Text
- ReadOnlySpan<Byte>
変換する数値を含む読み取り専用 UTF-8 文字スパン。
- result
- Double
このメソッドから制御が戻るときに、変換に成功した場合は、 utf8Text に含まれる数値または記号と等価の倍精度浮動小数点数が格納されます。変換に失敗した場合は 0 が格納されます。
utf8TextがEmptyされているか、有効な形式でない場合、変換は失敗します。 このパラメーターは初期化されていない状態で渡されます。結果で最初に指定された値は上書きされます。
返品
適用対象
TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
指定したスタイルおよびカルチャ固有の形式の数値の文字列形式を含む文字スパンを、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。
public:
static bool TryParse(ReadOnlySpan<char> s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = System::Numerics::INumberBase<double>::TryParse;
public:
static bool TryParse(ReadOnlySpan<char> s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result);
public static bool TryParse(ReadOnlySpan<char> s, System.Globalization.NumberStyles style, IFormatProvider? provider, out double result);
public static bool TryParse(ReadOnlySpan<char> s, System.Globalization.NumberStyles style, IFormatProvider provider, out double result);
static member TryParse : ReadOnlySpan<char> * System.Globalization.NumberStyles * IFormatProvider * double -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), style As NumberStyles, provider As IFormatProvider, ByRef result As Double) As Boolean
パラメーター
- s
- ReadOnlySpan<Char>
変換する数値を含む読み取り専用の文字スパン。
- style
- NumberStyles
NumberStylesの許可された形式を示すs値のビットごとの組み合わせ。 指定する一般的な値は、Floatと組み合わせてAllowThousands。
- provider
- IFormatProvider
sに関するカルチャ固有の書式設定情報を提供するオブジェクト。
- result
- Double
このメソッドが戻り、変換が成功した場合は、 sに含まれる数値または記号に相当する倍精度浮動小数点数が含まれます。 変換に失敗した場合は 0 を格納します。
s パラメーターがnull、空の文字スパン、またはstyleに準拠した形式の数値でない場合、変換は失敗します。
sが Double.MinValue より小さい有効な数値である場合、resultはNegativeInfinity。
sが Double.MaxValue より大きい有効な数値である場合、resultはPositiveInfinity。 このパラメーターは初期化されていない状態で渡されます。 result で最初に指定された値は上書きされます。
返品
注釈
.NET Core 3.0 以降では、IEEE 754 仕様で必要に応じて、大きすぎる値は PositiveInfinity または NegativeInfinity に丸められます。 以前のバージョン (.NET Framework を含む) では、大きすぎる値を解析するとエラーが発生しました。
適用対象
TryParse(String, NumberStyles, IFormatProvider, Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
指定したスタイルおよびカルチャ固有の形式の数値の文字列形式を、等価の倍精度浮動小数点数に変換します。 戻り値は、変換が成功したか失敗したかを示します。
public:
static bool TryParse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result);
public:
static bool TryParse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = System::Numerics::INumberBase<double>::TryParse;
public static bool TryParse(string s, System.Globalization.NumberStyles style, IFormatProvider provider, out double result);
public static bool TryParse(string? s, System.Globalization.NumberStyles style, IFormatProvider? provider, out double result);
static member TryParse : string * System.Globalization.NumberStyles * IFormatProvider * double -> bool
Public Shared Function TryParse (s As String, style As NumberStyles, provider As IFormatProvider, ByRef result As Double) As Boolean
パラメーター
- s
- String
変換する数値を含む文字列。
- style
- NumberStyles
NumberStylesの許可された形式を示すs値のビットごとの組み合わせ。 指定する一般的な値は、Floatと組み合わせてAllowThousands。
- provider
- IFormatProvider
IFormatProviderに関するカルチャ固有の書式設定情報を提供するs。
- result
- Double
このメソッドから制御が戻るときに、変換に成功した場合は、 sに含まれる数値または記号に相当する倍精度浮動小数点数が含まれます。変換に失敗した場合は 0 が格納されます。
s パラメーターがnullまたはEmptyであるか、styleに準拠している形式ではない場合、またはstyleがNumberStyles列挙定数の有効な組み合わせでない場合、変換は失敗します。
sが SByte.MinValue より小さいか、SByte.MaxValue より大きい数値を表す場合、.NET Framework でも失敗します。 このパラメーターは初期化されていない状態で渡されます。 result で最初に指定された値は上書きされます。
返品
例外
例
次の例では、 Double.TryParse(String, NumberStyles, IFormatProvider, Double) メソッドを使用して、特定のスタイルを持ち、特定のカルチャの規則を使用して書式設定された数値の文字列形式を解析する方法を示します。
string value;
NumberStyles style;
CultureInfo culture;
double number;
// Parse currency value using en-GB culture.
value = "£1,097.63";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
culture = CultureInfo.CreateSpecificCulture("en-GB");
if (Double.TryParse(value, style, culture, out number))
Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
// Converted '£1,097.63' to 1097.63.
value = "1345,978";
style = NumberStyles.AllowDecimalPoint;
culture = CultureInfo.CreateSpecificCulture("fr-FR");
if (Double.TryParse(value, style, culture, out number))
Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
// Converted '1345,978' to 1345.978.
value = "1.345,978";
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
culture = CultureInfo.CreateSpecificCulture("es-ES");
if (Double.TryParse(value, style, culture, out number))
Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
// Converted '1.345,978' to 1345.978.
value = "1 345,978";
if (Double.TryParse(value, style, culture, out number))
Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
// Unable to convert '1 345,978'.
// Parse currency value using en-GB culture.
let value = "£1,097.63"
let style = NumberStyles.Number ||| NumberStyles.AllowCurrencySymbol
let culture = CultureInfo.CreateSpecificCulture "en-GB"
match Double.TryParse(value, style, culture) with
| true, number ->
printfn $"Converted '{value}' to {number}."
| _ ->
printfn $"Unable to convert '{value}'."
// Displays:
// Converted '£1,097.63' to 1097.63.
let value = "1345,978"
let style = NumberStyles.AllowDecimalPoint
let culture = CultureInfo.CreateSpecificCulture "fr-FR"
match Double.TryParse(value, style, culture) with
| true, number ->
printfn $"Converted '{value}' to {number}."
| _ ->
printfn $"Unable to convert '{value}'."
// Displays:
// Converted '1345,978' to 1345.978.
let value = "1.345,978"
let style = NumberStyles.AllowDecimalPoint ||| NumberStyles.AllowThousands
let culture = CultureInfo.CreateSpecificCulture("es-ES")
match Double.TryParse(value, style, culture) with
| true, number ->
printfn $"Converted '{value}' to {number}."
| _ ->
printfn $"Unable to convert '{value}'."
// Displays:
// Converted '1.345,978' to 1345.978.
let value = "1 345,978"
match Double.TryParse(value, style, culture) with
| true, number ->
printfn $"Converted '{value}' to {number}."
| _ ->
printfn $"Unable to convert '{value}'."
// Displays:
// Unable to convert '1 345,978'.
Dim value As String
Dim style As NumberStyles
Dim culture As CultureInfo
Dim number As Double
' Parse currency value using en-GB culture.
value = "£1,097.63"
style = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
culture = CultureInfo.CreateSpecificCulture("en-GB")
If Double.TryParse(value, style, culture, number) Then
Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
' Converted '£1,097.63' to 1097.63.
value = "1345,978"
style = NumberStyles.AllowDecimalPoint
culture = CultureInfo.CreateSpecificCulture("fr-FR")
If Double.TryParse(value, style, culture, number) Then
Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
' Converted '1345,978' to 1345.978.
value = "1.345,978"
style = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands
culture = CultureInfo.CreateSpecificCulture("es-ES")
If Double.TryParse(value, style, culture, number) Then
Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
' Converted '1.345,978' to 1345.978.
value = "1 345,978"
If Double.TryParse(value, style, culture, number) Then
Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
' Unable to convert '1 345,978'.
注釈
.NET Core 3.0 以降では、IEEE 754 仕様で必要に応じて、大きすぎる値は PositiveInfinity または NegativeInfinity に丸められます。 以前のバージョン (.NET Framework を含む) では、大きすぎる値を解析するとエラーが発生しました。
TryParseメソッドはParse(String, NumberStyles, IFormatProvider)メソッドに似ていますが、変換が失敗してもこのメソッドは例外をスローしません。 変換が成功した場合、戻り値は true され、 result パラメーターは変換の結果に設定されます。 変換が失敗した場合、戻り値は false され、 result パラメーターは 0 に設定されます。 これにより、例外処理を使用して、FormatExceptionが無効であり、正常に解析できない場合にsをテストする必要がなくなります。
style パラメーターは、解析操作が成功するためのs パラメーターの許容形式を定義します。
NumberStyles列挙型のビット フラグの組み合わせである必要があります。 次の NumberStyles メンバーはサポートされていません。
s パラメーターには、NumberFormatInfo.PositiveInfinitySymbolで示されるカルチャのNumberFormatInfo.NegativeInfinitySymbol、NumberFormatInfo.NaNSymbol、またはproviderシンボルを含めることができます。 この文字列比較は、.NET Core 3.0 以降のバージョンでは大文字と小文字は区別されませんが、.NET Framework を含む以前のバージョンでは大文字と小文字が区別されます。 さらに、 styleの値によっては、 s パラメーターに次の要素が含まれる場合があります。
[ws][$][sign][整数桁,]整数桁[.fractional-digits][e[sign]exponential-digits][ws]
角かっこ ([ と ]) の要素は省略可能です。 次の表では、各要素について説明します。
| 要素 | 形容 |
|---|---|
| ws | 省略可能な空白。
sに style フラグが含まれている場合は、NumberStyles.AllowLeadingWhiteの先頭に空白を表示できます。
sにstyleフラグが含まれている場合は、NumberStyles.AllowTrailingWhiteの末尾に表示されます。 |
| $ | カルチャ固有の通貨記号。 文字列内での位置は、NumberFormatInfo.CurrencyNegativePattern パラメーターのNumberFormatInfo.CurrencyPositivePattern メソッドによって返されるNumberFormatInfo オブジェクトのIFormatProvider.GetFormatまたはproviderプロパティによって定義されます。
sにstyleフラグが含まれている場合、通貨記号はNumberStyles.AllowCurrencySymbolに表示されます。 |
| サイン | 省略可能な記号。
sにstyle フラグが含まれている場合はNumberStyles.AllowLeadingSignの先頭に表示され、sにstyle フラグが含まれている場合はNumberStyles.AllowTrailingSignの末尾に表示されます。
sでかっこを使用して、styleにNumberStyles.AllowParentheses フラグが含まれている場合は負の値を示すことができます。 |
| 整数桁 | 数値の整数部分を指定する 0 から 9 までの一連の数字。 整数桁は、小数部が存在する場合は使用できません。 |
| , | カルチャ固有の桁区切り記号。 現在のカルチャの桁区切り記号は、s フラグstyle含まれている場合、NumberStyles.AllowThousandsに表示されます。 |
| . | カルチャ固有の小数点記号。 現在のカルチャの小数点記号は、s フラグstyle含まれている場合、NumberStyles.AllowDecimalPointに表示できます。 |
| fractional-digits | 数値の小数部を指定する 0 から 9 までの一連の数字。
sにstyle フラグが含まれている場合、小数部の数字はNumberStyles.AllowDecimalPointに表示されます。 |
| e | e または E 文字。指数表記を使用して s が数値を表すことができることを示します。 スタイルにs フラグが含まれている場合、NumberStyles.AllowExponent パラメーターは指数表記で数値を表すことができます。 |
| exponential-digits | 指数を指定する 0 から 9 までの一連の数字。 |
手記
sで終了する NUL (U+0000) 文字は、style引数の値に関係なく、解析操作では無視されます。
数字のみを含む文字列 ( NumberStyles.None スタイルに対応) は、 Double 型の範囲内にある場合、常に正常に解析されます。 残りの System.Globalization.NumberStyles メンバーは、入力文字列に存在する必要がない要素を制御します。 次の表は、個々の NumberStyles フラグが、 sに存在する可能性がある要素に与える影響を示しています。
| NumberStyles 値 | 数字に加えて s で許可される要素 |
|---|---|
| None | 整数桁の要素のみ。 |
| AllowDecimalPoint | .および小数部の要素。 |
| AllowExponent |
s パラメーターでは指数表記を使用することもできます。 このフラグ自体は、 整数桁E指数桁の形式の値をサポートします。正符号や負符号、小数点記号などの要素を使用して指数表記で文字列を正常に解析するには、追加のフラグが必要です。 |
| AllowLeadingWhite |
の先頭にある s 要素。 |
| AllowTrailingWhite |
の末尾にある s 要素。 |
| AllowLeadingSign |
の先頭にある s 要素。 |
| AllowTrailingSign |
の末尾にある s 要素。 |
| AllowParentheses | 数値を囲むかっこの形式の 符号 要素。 |
| AllowThousands | 要素。 |
| AllowCurrencySymbol | $要素。 |
| Currency | すべての。
s パラメーターは、指数表記で 16 進数または数値を表すことはできません。 |
| Float |
の先頭または末尾の s 要素、の先頭のs、および . 記号。
s パラメーターでは指数表記を使用することもできます。 |
| Number |
ws、sign、桁区切り記号 (,)、小数点 (.) の各要素。 |
| Any |
sを除くすべてのスタイルは、16 進数を表すことはできません。 |
provider パラメーターは、IFormatProviderやNumberFormatInfo オブジェクトなどのCultureInfo実装です。
provider パラメーターは、解析に使用されるカルチャ固有の情報を提供します。
providerがnullまたはNumberFormatInfo オブジェクトを取得できない場合は、現在のカルチャの書式情報が使用されます。
s パラメーターが数値nullまたは数値でない場合、provider パラメーターがNumberFormatInfo オブジェクトを生成しない場合、または style パラメーターがNumberStyles列挙型のビット フラグの組み合わせでない場合、変換は失敗します。
通常、Double.TryParse メソッドを呼び出して作成された文字列をDouble.ToString メソッドに渡すと、元のDouble値が返されます。 ただし、精度が失われるため、値が等しくない可能性があります。 さらに、 Double.MinValue または Double.MaxValue の文字列形式を解析しようとすると、ラウンド トリップに失敗します。 .NET Framework では、 OverflowExceptionがスローされます。 .NET Core 3.0 以降のバージョンでは、MinValueを解析しようとするとDouble.NegativeInfinityが返され、MaxValue解析しようとするとDouble.PositiveInfinityが返されます。 次の例では、図を示します。
using System;
public class Example
{
public static void Main()
{
string value;
double number;
value = Double.MinValue.ToString();
if (Double.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("{0} is outside the range of a Double.",
value);
value = Double.MaxValue.ToString();
if (Double.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("{0} is outside the range of a Double.",
value);
}
}
// The example displays the following output:
// -1.79769313486232E+308 is outside the range of the Double type.
// 1.79769313486232E+308 is outside the range of the Double type.
open System
[<EntryPoint>]
let main _ =
let value = string Double.MinValue
match Double.TryParse value with
| true, number ->
printfn $"{number}"
| _ ->
printfn $"{value} is outside the range of a Double."
let value = string Double.MaxValue
match Double.TryParse value with
| true, number ->
printfn $"{number}"
| _ ->
printfn $"{value} is outside the range of a Double."
0
// The example displays the following output:
// -1.79769313486232E+308 is outside the range of the Double type.
// 1.79769313486232E+308 is outside the range of the Double type.
Module Example
Public Sub Main()
Dim value As String
Dim number As Double
value = Double.MinValue.ToString()
If Double.TryParse(value, number) Then
Console.WriteLine(number)
Else
Console.WriteLine("{0} is outside the range of a Double.", _
value)
End If
value = Double.MaxValue.ToString()
If Double.TryParse(value, number) Then
Console.WriteLine(number)
Else
Console.WriteLine("{0} is outside the range of a Double.", _
value)
End If
End Sub
End Module
' The example displays the following output:
' -1.79769313486232E+308 is outside the range of the Double type.
' 1.79769313486232E+308 is outside the range of the Double type.
.NET Framework では、 s が Double データ型の範囲外の場合、 Double.TryParse(String, NumberStyles, IFormatProvider, Double) メソッドは OverflowExceptionをスローします。
.NET Core 3.0 以降のバージョンでは、 s が Double データ型の範囲外である場合、例外はスローされません。 ほとんどの場合、 Double.TryParse(String, NumberStyles, IFormatProvider, Double) メソッドは、 Double.PositiveInfinity または Double.NegativeInfinityの結果を計算します。 ただし、正または負の無限大よりも Double の最大値または最小値に近いと見なされる小さな値のセットがあります。 このような場合、メソッドは Double.MaxValue または Double.MinValueの結果を計算します。
解析操作中に s パラメーターで区切り記号が検出され、該当する通貨または数値の小数点とグループの区切り記号が同じである場合、解析操作では、区切り記号がグループ区切り記号ではなく小数点であると見なされます。 区切り記号の詳細については、「 CurrencyDecimalSeparator、 NumberDecimalSeparator、 CurrencyGroupSeparator、および NumberGroupSeparator」を参照してください。