Double.Parse Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egy szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja.
Túlterhelések
| Név | Description |
|---|---|
| Parse(String) |
Egy szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja. |
| Parse(ReadOnlySpan<Byte>, IFormatProvider) |
UTF-8 karakterből álló tartományt elemez egy értékben. |
| Parse(ReadOnlySpan<Char>, IFormatProvider) |
Több karakterből álló elemet elemez egy értékben. |
| Parse(String, NumberStyles) |
Egy adott stílusban lévő szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja. |
| Parse(String, IFormatProvider) |
Egy adott kultúraspecifikus formátumban lévő szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja. |
| Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider) |
UTF-8 karakterből álló tartományt elemez egy értékben. |
| Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider) |
Egy adott stílusban és kultúrában megadott formátumban lévő szám sztring-ábrázolását tartalmazó karakterfedezetet alakít át dupla pontosságú lebegőpontos számegyenértékké. |
| Parse(String, NumberStyles, IFormatProvider) |
Egy szám sztring-ábrázolását egy megadott stílusban és kultúraspecifikus formátumban alakítja át dupla pontosságú lebegőpontos számegyenértékké. |
Megjegyzések
A .NET Core 3.0-s és újabb verzióiban az IEEE 754 specifikációja szerint a túl nagy értékek PositiveInfinity vagy NegativeInfinity értékre vannak kerekítve. A korábbi verziókban, beleértve a .NET-keretrendszert is, a túl nagy érték elemzése sikertelenséget eredményezett.
Parse(String)
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
Egy szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja.
public:
static double Parse(System::String ^ s);
public static double Parse(string s);
static member Parse : string -> double
Public Shared Function Parse (s As String) As Double
Paraméterek
- s
- String
Egy átalakítandó számot tartalmazó sztring.
Válaszok
Dupla pontosságú lebegőpontos szám, amely megegyezik a megadott numerikus értékkel vagy szimbólummal s.
Kivételek
s az null.
s nem érvényes formátumú számot jelöl.
csak .NET keretrendszer: sDouble.MinValue vagy nagyobb, mint Double.MaxValue.
Példák
Az alábbi példa a metódus használatát Parse(String) mutatja be.
public class Temperature {
// Parses the temperature from a string in form
// [ws][sign]digits['F|'C][ws]
public static Temperature Parse(string s) {
Temperature temp = new Temperature();
if( s.TrimEnd(null).EndsWith("'F") ) {
temp.Value = Double.Parse( s.Remove(s.LastIndexOf('\''), 2) );
}
else if( s.TrimEnd(null).EndsWith("'C") ) {
temp.Celsius = Double.Parse( s.Remove(s.LastIndexOf('\''), 2) );
}
else {
temp.Value = Double.Parse(s);
}
return temp;
}
// The value holder
protected double m_value;
public double Value {
get {
return m_value;
}
set {
m_value = value;
}
}
public double Celsius {
get {
return (m_value-32.0)/1.8;
}
set {
m_value = 1.8*value+32.0;
}
}
}
type Temperature() =
// Parses the temperature from a string in form
// [ws][sign]digits['F|'C][ws]
static member Parse(s: string) =
let temp = Temperature()
if s.TrimEnd(null).EndsWith "'F" then
temp.Value <- Double.Parse(s.Remove(s.LastIndexOf '\'', 2) )
elif s.TrimEnd(null).EndsWith "'C" then
temp.Celsius <- Double.Parse(s.Remove(s.LastIndexOf '\'', 2) )
else
temp.Value <- Double.Parse s
temp
member val Value = 0. with get, set
member this.Celsius
with get () =
(this.Value - 32.) / 1.8
and set (value) =
this.Value <- 1.8 * value + 32.
Public Class Temperature
' Parses the temperature from a string in form
' [ws][sign]digits['F|'C][ws]
Public Shared Function Parse(ByVal s As String) As Temperature
Dim temp As New Temperature()
If s.TrimEnd(Nothing).EndsWith("'F") Then
temp.Value = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2))
Else
If s.TrimEnd(Nothing).EndsWith("'C") Then
temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2))
Else
temp.Value = Double.Parse(s)
End If
End If
Return temp
End Function 'Parse
' The value holder
Protected m_value As Double
Public Property Value() As Double
Get
Return m_value
End Get
Set(ByVal Value As Double)
m_value = Value
End Set
End Property
Public Property Celsius() As Double
Get
Return (m_value - 32) / 1.8
End Get
Set(ByVal Value As Double)
m_value = Value * 1.8 + 32
End Set
End Property
End Class
Megjegyzések
A .NET Core 3.0-s és újabb verzióiban az IEEE 754 specifikációja szerint a túl nagy értékek PositiveInfinity vagy NegativeInfinity értékre vannak kerekítve. A korábbi verziókban, beleértve a .NET-keretrendszert is, a túl nagy érték elemzése sikertelenséget eredményezett.
A s paraméter az aktuális kultúra szimbólumát NumberFormatInfo.PositiveInfinitySymbolvagy NumberFormatInfo.NegativeInfinitySymbol szimbólumát NumberFormatInfo.NaNSymbolis tartalmazhatja. Ez a sztring-összehasonlítás nem érzéketlen a .NET Core 3.0-s és újabb verzióiban, de a korábbi verziókban, például a .NET-keretrendszerben megkülönbözteti a kis- és nagybetűket. A s paraméter az űrlap sztringje is lehet:
[ws][jel][integráljegyek[,]]integrál-számjegyek[.[törtjegyek]][E[jel]exponenciális számjegyek][ws]
A szögletes zárójelek ([ és ]) elemei nem kötelezőek. Az alábbi táblázat az egyes elemeket ismerteti.
| Elem | Leírás |
|---|---|
| Ws | Üres karakterek sorozata. |
| jel | Negatív jelszimbólum (-) vagy pozitív jelszimbólum (+). Csak bevezető jel használható. |
| integráljegyek | 0 és 9 közötti számjegyek sorozata, amelyek a szám szerves részét határozzák meg. Az integráljegyek futtatása csoportelválasztó szimbólummal particionálható. Egyes kultúrákban például egy vessző (,) több ezer csoportot választ el egymástól. Az integráljegyek elem hiányzik, ha a sztring tartalmazza a törtjegy elemet. |
| , | Kultúraspecifikus ezres elválasztó szimbólum. |
| . | Kultúraspecifikus tizedesjel. |
| törtjegyek | 0 és 9 közötti számjegysorozat, amely a szám törtrészét adja meg. |
| E | Az "e" vagy "E" karakter, amely azt jelzi, hogy az érték exponenciális (tudományos) jelölésben jelenik meg. |
| exponenciális számjegyek | 0 és 9 közötti számjegysorozat, amely kitevőt határoz meg. |
A s paramétert a rendszer a és NumberStyles.Float a NumberStyles.AllowThousands jelzők kombinációjával értelmezi. Ez azt jelenti, hogy a szabad terület és az ezres elválasztójelek megengedettek, például a pénznemszimbólumok nem. Ha pontosabban szeretné szabályozni, hogy mely stíluselemek legyenek engedélyezve s az elemzési művelet sikeres végrehajtásához, hívja meg a metódust vagy a Double.Parse(String, NumberStyles) metódust Double.Parse(String, NumberStyles, IFormatProvider) .
A s paraméter az aktuális kultúrához inicializált objektum formázási információi NumberFormatInfo alapján lesz értelmezve. További információért lásd CurrentInfo. Ha egy sztringet más kultúra formázási információinak használatával szeretne elemezni, hívja meg vagy hívja meg a metódust Double.Parse(String, IFormatProvider)Double.Parse(String, NumberStyles, IFormatProvider) .
Általában, ha a Double.Parse metódus meghívásával létrehozott sztringet ad át a Double.ToString metódusnak, az eredeti Double érték lesz visszaadva. A .NET Keretrendszerben azonban előfordulhat, hogy az értékek nem lesznek egyenlők a pontosság elvesztése miatt. Ezen kívül megpróbálhatja elemezni a sztring megjelenítését, Double.MinValue vagy Double.MaxValue nem sikerül az oda-vissza út. A .NET-keretrendszeren egy OverflowException dob. Az alábbi példa egy illusztrációt tartalmaz.
string value;
value = Double.MinValue.ToString();
try {
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException) {
Console.WriteLine($"{value} is outside the range of the Double type.");
}
value = Double.MaxValue.ToString();
try {
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException) {
Console.WriteLine($"{value} is outside the range of the Double type.");
}
// Format without the default precision.
value = Double.MinValue.ToString("G17");
try
{
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException)
{
Console.WriteLine($"{value} is outside the range of the Double type.");
}
// 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.
// -1.79769313486232E+308
open System
[<EntryPoint>]
let main _ =
let value = string Double.MinValue
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
let value = string Double.MaxValue
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
// Format without the default precision.
let value = Double.MinValue.ToString "G17"
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
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.
// -1.79769313486232E+308
Dim value As String
value = Double.MinValue.ToString()
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
value = Double.MaxValue.ToString()
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
' Format without the default precision.
value = Double.MinValue.ToString("G17")
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
' 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.
' -1.79769313486232E+308
Ha .NET keretrendszerben a s kívül esik a Double adattípus tartományán, a Parse(String) metódus OverflowException.
A .NET Core 3.0-s és újabb verzióiban nem történik kivétel, ha s kívül esik a Double adattípus tartományán. A legtöbb esetben a metódus vissza fog térni Double.PositiveInfinity vagy Double.NegativeInfinity. Van azonban egy kis értékkészlet, amely közelebb van a pozitív vagy negatív végtelennél nagyobb maximális vagy minimális értékekhez Double . Ezekben az esetekben a metódus ad vissza Double.MaxValue vagy Double.MinValue.
Ha egy elemzési művelet során elválasztó elem található a s paraméterben, és a vonatkozó pénznem vagy szám decimális és csoportelválasztói megegyeznek, az elemzési művelet feltételezi, hogy az elválasztó nem csoportelválasztó, hanem decimális elválasztó. Az elválasztókkal kapcsolatos további információkért lásd CurrencyDecimalSeparator: , NumberDecimalSeparator, CurrencyGroupSeparator, és NumberGroupSeparator.
Lásd még
- ToString()
- TryParse(String, Double)
Numerikus sztringek elemzése a .NET
A következőre érvényes:
Parse(ReadOnlySpan<Byte>, IFormatProvider)
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
UTF-8 karakterből álló tartományt elemez egy értékben.
public:
static double Parse(ReadOnlySpan<System::Byte> utf8Text, IFormatProvider ^ provider) = IUtf8SpanParsable<double>::Parse;
public static double Parse(ReadOnlySpan<byte> utf8Text, IFormatProvider? provider);
static member Parse : ReadOnlySpan<byte> * IFormatProvider -> double
Public Shared Function Parse (utf8Text As ReadOnlySpan(Of Byte), provider As IFormatProvider) As Double
Paraméterek
- utf8Text
- ReadOnlySpan<Byte>
Az elemezni kívánt UTF-8 karakter szélessége.
- provider
- IFormatProvider
Egy objektum, amely kultúraspecifikus formázási információkat tartalmaz a fájlról utf8Text.
Válaszok
Az elemzés utf8Texteredménye.
Megvalósítás
A következőre érvényes:
Parse(ReadOnlySpan<Char>, IFormatProvider)
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
Több karakterből álló elemet elemez egy értékben.
public:
static double Parse(ReadOnlySpan<char> s, IFormatProvider ^ provider) = ISpanParsable<double>::Parse;
public static double Parse(ReadOnlySpan<char> s, IFormatProvider? provider);
static member Parse : ReadOnlySpan<char> * IFormatProvider -> double
Public Shared Function Parse (s As ReadOnlySpan(Of Char), provider As IFormatProvider) As Double
Paraméterek
- s
- ReadOnlySpan<Char>
Az elemezni kívánt karakterek száma.
- provider
- IFormatProvider
Egy objektum, amely kultúraspecifikus formázási információkat tartalmaz a fájlról s.
Válaszok
Az elemzés seredménye.
Megvalósítás
A következőre érvényes:
Parse(String, NumberStyles)
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
Egy adott stílusban lévő szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja.
public:
static double Parse(System::String ^ s, System::Globalization::NumberStyles style);
public static double Parse(string s, System.Globalization.NumberStyles style);
static member Parse : string * System.Globalization.NumberStyles -> double
Public Shared Function Parse (s As String, style As NumberStyles) As Double
Paraméterek
- s
- String
Egy átalakítandó számot tartalmazó sztring.
- style
- NumberStyles
Az enumerálási értékek bitenkénti kombinációja, amely a stíluselemeket sjelzi. A megadható tipikus érték a kombinálás és Floata AllowThousands kombináció.
Válaszok
Dupla pontosságú lebegőpontos szám, amely megegyezik a megadott numerikus értékkel vagy szimbólummal s.
Kivételek
s az null.
s nem érvényes formátumú számot jelöl.
csak .NET keretrendszer: sDouble.MinValue vagy nagyobb, mint Double.MaxValue.
Példák
Az alábbi példa a Parse(String, NumberStyles) metódussal elemzi az értékek sztring-ábrázolását Double a en-US kultúra használatával.
public static void Main()
{
// Set current thread culture to en-US.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
string value;
NumberStyles styles;
// Parse a string in exponential notation with only the AllowExponent flag.
value = "-1.063E-02";
styles = NumberStyles.AllowExponent;
ShowNumericValue(value, styles);
// Parse a string in exponential notation
// with the AllowExponent and Number flags.
styles = NumberStyles.AllowExponent | NumberStyles.Number;
ShowNumericValue(value, styles);
// Parse a currency value with leading and trailing white space, and
// white space after the U.S. currency symbol.
value = " $ 6,164.3299 ";
styles = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
ShowNumericValue(value, styles);
// Parse negative value with thousands separator and decimal.
value = "(4,320.64)";
styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |
NumberStyles.Float;
ShowNumericValue(value, styles);
styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |
NumberStyles.Float | NumberStyles.AllowThousands;
ShowNumericValue(value, styles);
}
private static void ShowNumericValue(string value, NumberStyles styles)
{
double number;
try
{
number = Double.Parse(value, styles);
Console.WriteLine("Converted '{0}' using {1} to {2}.",
value, styles.ToString(), number);
}
catch (FormatException)
{
Console.WriteLine("Unable to parse '{0}' with styles {1}.",
value, styles.ToString());
}
Console.WriteLine();
}
// The example displays the following output to the console:
// Unable to parse '-1.063E-02' with styles AllowExponent.
//
// Converted '-1.063E-02' using AllowTrailingSign, AllowThousands, Float to -0.01063.
//
// Converted ' $ 6,164.3299 ' using Number, AllowCurrencySymbol to 6164.3299.
//
// Unable to parse '(4,320.64)' with styles AllowTrailingSign, AllowParentheses, Float.
//
// Converted '(4,320.64)' using AllowTrailingSign, AllowParentheses, AllowThousands, Float to -4320.64.
open System
open System.Globalization
open System.Threading
let showNumericValue (value: string) (styles: NumberStyles) =
try
let number = Double.Parse(value, styles)
printfn $"Converted '{value}' using {styles} to {number}."
with :? FormatException ->
printfn $"Unable to parse '{value}' with styles {styles}."
printfn ""
[<EntryPoint>]
let main _ =
// Set current thread culture to en-US.
Thread.CurrentThread.CurrentCulture <- CultureInfo.CreateSpecificCulture "en-US"
// Parse a string in exponential notation with only the AllowExponent flag.
let value = "-1.063E-02"
let styles = NumberStyles.AllowExponent
showNumericValue value styles
// Parse a string in exponential notation
// with the AllowExponent and Number flags.
let styles = NumberStyles.AllowExponent ||| NumberStyles.Number
showNumericValue value styles
// Parse a currency value with leading and trailing white space, and
// white space after the U.S. currency symbol.
let value = " $ 6,164.3299 "
let styles = NumberStyles.Number ||| NumberStyles.AllowCurrencySymbol
showNumericValue value styles
// Parse negative value with thousands separator and decimal.
let value = "(4,320.64)"
let styles =
NumberStyles.AllowParentheses ||| NumberStyles.AllowTrailingSign ||| NumberStyles.Float
showNumericValue value styles
let styles =
NumberStyles.AllowParentheses ||| NumberStyles.AllowTrailingSign ||| NumberStyles.Float ||| NumberStyles.AllowThousands
showNumericValue value styles
0
// The example displays the following output to the console:
// Unable to parse '-1.063E-02' with styles AllowExponent.
//
// Converted '-1.063E-02' using AllowTrailingSign, AllowThousands, Float to -0.01063.
//
// Converted ' $ 6,164.3299 ' using Number, AllowCurrencySymbol to 6164.3299.
//
// Unable to parse '(4,320.64)' with styles AllowTrailingSign, AllowParentheses, Float.
//
// Converted '(4,320.64)' using AllowTrailingSign, AllowParentheses, AllowThousands, Float to -4320.64.
Public Sub Main()
' Set current thread culture to en-US.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
Dim value As String
Dim styles As NumberStyles
' Parse a string in exponential notation with only the AllowExponent flag.
value = "-1.063E-02"
styles = NumberStyles.AllowExponent
ShowNumericValue(value, styles)
' Parse a string in exponential notation
' with the AllowExponent and Number flags.
styles = NumberStyles.AllowExponent Or NumberStyles.Number
ShowNumericValue(value, styles)
' Parse a currency value with leading and trailing white space, and
' white space after the U.S. currency symbol.
value = " $ 6,164.3299 "
styles = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
ShowNumericValue(value, styles)
' Parse negative value with thousands separator and decimal.
value = "(4,320.64)"
styles = NumberStyles.AllowParentheses Or NumberStyles.AllowTrailingSign _
Or NumberStyles.Float
ShowNumericValue(value, styles)
styles = NumberStyles.AllowParentheses Or NumberStyles.AllowTrailingSign _
Or NumberStyles.Float Or NumberStyles.AllowThousands
ShowNumericValue(value, styles)
End Sub
Private Sub ShowNumericValue(value As String, styles As NumberStyles)
Dim number As Double
Try
number = Double.Parse(value, styles)
Console.WriteLine("Converted '{0}' using {1} to {2}.", _
value, styles.ToString(), number)
Catch e As FormatException
Console.WriteLine("Unable to parse '{0}' with styles {1}.", _
value, styles.ToString())
End Try
Console.WriteLine()
End Sub
' The example displays the following output to the console:
' Unable to parse '-1.063E-02' with styles AllowExponent.
'
' Converted '-1.063E-02' using AllowTrailingSign, AllowThousands, Float to -0.01063.
'
' Converted ' $ 6,164.3299 ' using Number, AllowCurrencySymbol to 6164.3299.
'
' Unable to parse '(4,320.64)' with styles AllowTrailingSign, AllowParentheses, Float.
'
' Converted '(4,320.64)' using AllowTrailingSign, AllowParentheses, AllowThousands, Float to -4320.64.
Megjegyzések
A .NET Core 3.0-s és újabb verzióiban az IEEE 754 specifikációja szerint a túl nagy értékek PositiveInfinity vagy NegativeInfinity értékre vannak kerekítve. A korábbi verziókban, beleértve a .NET-keretrendszert is, a túl nagy érték elemzése sikertelenséget eredményezett.
A style paraméter meghatározza azokat a stíluselemeket (például a szóközöket, az ezres elválasztójeleket és a s pénznemszimbólumokat), amelyek az elemzési művelet sikeres végrehajtásához engedélyezve vannak a paraméterben. Az enumerálás bitjelölőinek kombinációjának NumberStyles kell lennie. A következő NumberStyles tagok nem támogatottak:
A s paraméter az aktuális kultúra szimbólumát NumberFormatInfo.PositiveInfinitySymbolvagy NumberFormatInfo.NegativeInfinitySymbol szimbólumát NumberFormatInfo.NaNSymbolis tartalmazhatja. Ez a sztring-összehasonlítás nem érzéketlen a .NET Core 3.0-s és újabb verzióiban, de a korábbi verziókban, például a .NET-keretrendszerben megkülönbözteti a kis- és nagybetűket. A paraméter az értéktől styles függően a következő formát is öltheti:
[ws][$][jel][integral-digits[,]]integral-digits[.[törtjegyek]][E[jel]exponenciális számjegyek][ws]
A szögletes zárójelek ([ és ]) elemei nem kötelezőek. Az alábbi táblázat az egyes elemeket ismerteti.
| Elem | Leírás |
|---|---|
| Ws | Üres karakterek sorozata. Ha a jelölőt is magában foglalja, akkor az elején sstyle fehér terület jelenhet meg, és az adott jelölő végén NumberStyles.AllowLeadingWhitesstyle is megjelenhet.NumberStyles.AllowTrailingWhite |
| $ | Kultúraspecifikus pénznemszimbólum. A sztringben elfoglalt helyét az NumberFormatInfo.CurrencyNegativePattern aktuális kultúra és NumberFormatInfo.CurrencyPositivePattern tulajdonságai határozzák meg. Az aktuális kultúra pénznemszimbóluma akkor jelenhet meg, s ha style tartalmazza a jelölőt NumberStyles.AllowCurrencySymbol . |
| jel | Negatív jelszimbólum (-) vagy pozitív jelszimbólum (+). A jel a jelölőt is magában foglaló tábla elején sstyle jelenhet meg, és a jelző végén NumberStyles.AllowLeadingSignsstyle is megjelenik.NumberStyles.AllowTrailingSign Zárójelekkel negatív értéket jelölhet s , ha style a NumberStyles.AllowParentheses jelölőt is tartalmazza. |
| integráljegyek | 0 és 9 közötti számjegyek sorozata, amelyek a szám szerves részét határozzák meg. Az integráljegyek elem hiányzik, ha a sztring tartalmazza a törtjegy elemet. |
| , | Egy kultúraspecifikus csoportelválasztó. A jelenlegi kultúra csoportelválasztó szimbóluma akkor jelenhet meg, s ha style a jelölőt NumberStyles.AllowThousands is tartalmazza |
| . | Kultúraspecifikus tizedesjel. Az aktuális kultúra tizedesjele akkor jelenhet meg, s ha style tartalmazza a jelölőt NumberStyles.AllowDecimalPoint . |
| törtjegyek | 0 és 9 közötti számjegysorozat, amely a szám törtrészét adja meg. A tört számjegyek akkor jelenhetnek meg, s ha style a jelölőt NumberStyles.AllowDecimalPoint is tartalmazzák. |
| E | Az "e" vagy "E" karakter, amely azt jelzi, hogy az érték exponenciális (tudományos) jelölésben jelenik meg. A s paraméter exponenciális jelöléssel jelölhet egy számot, ha style tartalmazza a jelölőt NumberStyles.AllowExponent . |
| exponenciális számjegyek | 0 és 9 közötti számjegysorozat, amely kitevőt határoz meg. |
Note
A befejező NUL (U+0000) karaktereket s az elemzési művelet figyelmen kívül hagyja, függetlenül az style argumentum értékétől.
A csak számjegyeket tartalmazó sztring (amely megfelel a NumberStyles.None stílusnak) mindig sikeresen elemzi, ha a típus tartományában Double van. A többi System.Globalization.NumberStyles tag a bemeneti sztringben esetleg jelen lévő, de nem kötelező elemeket vezérli. Az alábbi táblázat azt mutatja be, hogy az egyes NumberStyles jelölők hogyan befolyásolják a lehetséges selemeket.
| NumberStyles érték | A számjegyeken kívül engedélyezett s elemek |
|---|---|
| None | Csak az integráljegyek elem. |
| AllowDecimalPoint | A tizedesjel (.) és a törtjegyű elemek. |
| AllowExponent | Az "e" vagy "E" karakter, amely exponenciális jelölést jelez. Ez a jelző önmagában támogatja az E számjegyek űrlapjáhozmegadottértékeket; További jelzőkre van szükség a sztringek sikeres elemzéséhez olyan elemekkel, mint a pozitív vagy negatív jelek és a tizedesjelek. |
| AllowLeadingWhite | A ws elem az elején s. |
| AllowTrailingWhite | A ws elem a végén s. |
| AllowLeadingSign | A tábla elején lévő s. |
| AllowTrailingSign | A jelelem a végén s. |
| AllowParentheses | A numerikus értéket tartalmazó zárójelek formájában megjelenő jelelem . |
| AllowThousands | Az ezres elválasztó (,) elem. |
| AllowCurrencySymbol | A pénznem ($) elem. |
| Currency | Minden elem.
s Nem jelölhet azonban hexadecimális számot vagy exponenciális számokat. |
| Float | A ws elem az elején vagy végén s, a jel elején s, és a tizedesjel (.) szimbólum. A s paraméter exponenciális jelölést is használhat. |
| Number | A ws, sign, ezres elválasztó (,) és decimális pont (.) elemek. |
| Any | Minden elem.
s A hexadecimális szám azonban nem jelölhető. |
A s paramétert a rendszer az aktuális rendszerkultúra inicializált objektumának formázási információi NumberFormatInfo alapján elemzi. További információért lásd CurrentInfo.
Általában, ha a Double.Parse metódus meghívásával létrehozott sztringet ad át a Double.ToString metódusnak, az eredeti Double érték lesz visszaadva. A pontosság elvesztése miatt azonban előfordulhat, hogy az értékek nem lesznek egyenlők. Ezen kívül megpróbálhatja elemezni a sztring megjelenítését, Double.MinValue vagy Double.MaxValue nem sikerül az oda-vissza út. A .NET-keretrendszeren egy OverflowException dob. .NET Core 3.0-s és újabb verzióiban Double.NegativeInfinity ad vissza, ha MinValue vagy Double.PositiveInfinity próbál elemezni MaxValue. Az alábbi példa egy illusztrációt tartalmaz.
string value;
value = Double.MinValue.ToString();
try {
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException) {
Console.WriteLine($"{value} is outside the range of the Double type.");
}
value = Double.MaxValue.ToString();
try {
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException) {
Console.WriteLine($"{value} is outside the range of the Double type.");
}
// Format without the default precision.
value = Double.MinValue.ToString("G17");
try
{
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException)
{
Console.WriteLine($"{value} is outside the range of the Double type.");
}
// 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.
// -1.79769313486232E+308
open System
[<EntryPoint>]
let main _ =
let value = string Double.MinValue
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
let value = string Double.MaxValue
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
// Format without the default precision.
let value = Double.MinValue.ToString "G17"
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
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.
// -1.79769313486232E+308
Dim value As String
value = Double.MinValue.ToString()
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
value = Double.MaxValue.ToString()
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
' Format without the default precision.
value = Double.MinValue.ToString("G17")
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
' 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.
' -1.79769313486232E+308
Ha .NET keretrendszerben a s kívül esik a Double adattípus tartományán, a Parse(String, NumberStyles) metódus OverflowException.
A .NET Core 3.0-s és újabb verzióiban nem történik kivétel, ha s kívül esik a Double adattípus tartományán. A legtöbb esetben a metódus vissza Parse(String, NumberStyles) fog térni Double.PositiveInfinity vagy Double.NegativeInfinity. Van azonban egy kis értékkészlet, amely közelebb van a pozitív vagy negatív végtelennél nagyobb maximális vagy minimális értékekhez Double . Ezekben az esetekben a metódus ad vissza Double.MaxValue vagy Double.MinValue.
Ha egy elemzési művelet során elválasztó elem található a s paraméterben, és a vonatkozó pénznem vagy szám decimális és csoportelválasztói megegyeznek, az elemzési művelet feltételezi, hogy az elválasztó nem csoportelválasztó, hanem decimális elválasztó. Az elválasztókkal kapcsolatos további információkért lásd CurrencyDecimalSeparator: , NumberDecimalSeparator, CurrencyGroupSeparator, és NumberGroupSeparator.
Lásd még
- ToString()
- TryParse
Numerikus sztringek elemzése a .NET
A következőre érvényes:
Parse(String, IFormatProvider)
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
Egy adott kultúraspecifikus formátumban lévő szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja.
public:
static double Parse(System::String ^ s, IFormatProvider ^ provider);
public:
static double Parse(System::String ^ s, IFormatProvider ^ provider) = IParsable<double>::Parse;
public static double Parse(string s, IFormatProvider provider);
public static double Parse(string s, IFormatProvider? provider);
static member Parse : string * IFormatProvider -> double
Public Shared Function Parse (s As String, provider As IFormatProvider) As Double
Paraméterek
- s
- String
Egy átalakítandó számot tartalmazó sztring.
- provider
- IFormatProvider
Egy objektum, amely a kultúraspecifikus formázási sinformációkat tartalmazza.
Válaszok
Dupla pontosságú lebegőpontos szám, amely megegyezik a megadott numerikus értékkel vagy szimbólummal s.
Megvalósítás
Kivételek
s az null.
s nem érvényes formátumú számot jelöl.
csak .NET keretrendszer: sDouble.MinValue vagy nagyobb, mint Double.MaxValue.
Példák
Az alábbi példa egy webes űrlap gombkattintásos eseménykezelője. A tulajdonság által HttpRequest.UserLanguages visszaadott tömb használatával határozza meg a felhasználó területi beállítását. Ezután létrehoz egy CultureInfo , az adott területi beállításnak megfelelő objektumot. Az NumberFormatInfo objektumhoz CultureInfo tartozó objektumot ezután a rendszer átadja a Parse(String, IFormatProvider) metódusnak, hogy a felhasználó bemenetét értékké Double alakítsa.
protected void OkToDouble_Click(object sender, EventArgs e)
{
string locale;
double number;
CultureInfo culture;
// Return if string is empty
if (String.IsNullOrEmpty(this.inputNumber.Text))
return;
// Get locale of web request to determine possible format of number
if (Request.UserLanguages.Length == 0)
return;
locale = Request.UserLanguages[0];
if (String.IsNullOrEmpty(locale))
return;
// Instantiate CultureInfo object for the user's locale
culture = new CultureInfo(locale);
// Convert user input from a string to a number
try
{
number = Double.Parse(this.inputNumber.Text, culture.NumberFormat);
}
catch (FormatException)
{
return;
}
catch (OverflowException)
{
return;
}
// Output number to label on web form
this.outputNumber.Text = "Number is " + number.ToString();
}
Protected Sub OkToDouble_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OkToDouble.Click
Dim locale As String
Dim culture As CultureInfo
Dim number As Double
' Return if string is empty
If String.IsNullOrEmpty(Me.inputNumber.Text) Then Exit Sub
' Get locale of web request to determine possible format of number
If Request.UserLanguages.Length = 0 Then Exit Sub
locale = Request.UserLanguages(0)
If String.IsNullOrEmpty(locale) Then Exit Sub
' Instantiate CultureInfo object for the user's locale
culture = New CultureInfo(locale)
' Convert user input from a string to a number
Try
number = Double.Parse(Me.inputNumber.Text, culture.NumberFormat)
Catch ex As FormatException
Exit Sub
Catch ex As Exception
Exit Sub
End Try
' Output number to label on web form
Me.outputNumber.Text = "Number is " & number.ToString()
End Sub
Megjegyzések
A .NET Core 3.0-s és újabb verzióiban az IEEE 754 specifikációja szerint a túl nagy értékek PositiveInfinity vagy NegativeInfinity értékre vannak kerekítve. A korábbi verziókban, beleértve a .NET-keretrendszert is, a túl nagy érték elemzése sikertelenséget eredményezett.
A metódus túlterhelését Parse(String, IFormatProvider) általában arra használják, hogy a különböző módokon formázható szöveget értékké alakítsa Double . Használható például a felhasználó által beírt szöveg HTML-szövegdobozsá alakítására numerikus értékké.
A s paramétert a rendszer a és NumberStyles.Float a NumberStyles.AllowThousands jelzők kombinációjával értelmezi. A s paraméter tartalmazhat NumberFormatInfo.PositiveInfinitySymbol, NumberFormatInfo.NegativeInfinitySymbolvagy NumberFormatInfo.NaNSymbol szimbólumot a megadott kultúrához provider. Ez a sztring-összehasonlítás nem érzéketlen a .NET Core 3.0-s és újabb verzióiban, de a korábbi verziókban, például a .NET-keretrendszerben megkülönbözteti a kis- és nagybetűket. A s paraméter az űrlap egy sztringét is tartalmazhatja:
[ws][jel]integrál-számjegyek[.[törtjegyek]][E[jel]exponenciális számjegyek][ws]
Az opcionális elemek szögletes zárójelek ([ és ]) keretbe vannak állítva. A "számjegyek" kifejezést tartalmazó elemek 0 és 9 közötti számkarakterek sorozatából állnak.
| Elem | Leírás |
|---|---|
| Ws | Üres karakterek sorozata. |
| jel | Negatív jelszimbólum (-) vagy pozitív jelszimbólum (+). |
| integráljegyek | 0 és 9 közötti számjegyek sorozata, amelyek a szám szerves részét határozzák meg. Az integráljegyek futtatása csoportelválasztó szimbólummal particionálható. Egyes kultúrákban például egy vessző (,) több ezer csoportot választ el egymástól. Az integráljegyek elem hiányzik, ha a sztring tartalmazza a törtjegy elemet. |
| . | Kultúraspecifikus tizedesjel. |
| törtjegyek | 0 és 9 közötti számjegysorozat, amely a szám törtrészét adja meg. |
| E | Az "e" vagy "E" karakter, amely azt jelzi, hogy az érték exponenciális (tudományos) jelölésben jelenik meg. |
| exponenciális számjegyek | 0 és 9 közötti számjegysorozat, amely kitevőt határoz meg. |
A numerikus formátumokkal kapcsolatos további információkért tekintse meg a Formázástípusok témakört.
A provider paraméter egy IFormatProvider implementáció, amelynek GetFormat metódusa egy NumberFormatInfo objektumot ad vissza, amely a formátum értelmezéséhez használt kultúraspecifikus információkat szolgáltatja s. Általában egy vagy NumberFormatInfo több CultureInfo objektumról van szó. Ha provider igen null , vagy NumberFormatInfo nem érhető el, a rendszer az aktuális rendszerkultúra formázási adatait használja.
Általában, ha a Double.Parse metódus meghívásával létrehozott sztringet ad át a Double.ToString metódusnak, az eredeti Double érték lesz visszaadva. A pontosság elvesztése miatt azonban előfordulhat, hogy az értékek nem lesznek egyenlők. Ezen kívül megpróbálhatja elemezni a sztring megjelenítését, Double.MinValue vagy Double.MaxValue nem sikerül az oda-vissza út. A .NET-keretrendszeren egy OverflowException dob. .NET Core 3.0-s és újabb verzióiban Double.NegativeInfinity ad vissza, ha MinValue vagy Double.PositiveInfinity próbál elemezni MaxValue. Az alábbi példa egy illusztrációt tartalmaz.
string value;
value = Double.MinValue.ToString();
try {
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException) {
Console.WriteLine($"{value} is outside the range of the Double type.");
}
value = Double.MaxValue.ToString();
try {
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException) {
Console.WriteLine($"{value} is outside the range of the Double type.");
}
// Format without the default precision.
value = Double.MinValue.ToString("G17");
try
{
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException)
{
Console.WriteLine($"{value} is outside the range of the Double type.");
}
// 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.
// -1.79769313486232E+308
open System
[<EntryPoint>]
let main _ =
let value = string Double.MinValue
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
let value = string Double.MaxValue
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
// Format without the default precision.
let value = Double.MinValue.ToString "G17"
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
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.
// -1.79769313486232E+308
Dim value As String
value = Double.MinValue.ToString()
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
value = Double.MaxValue.ToString()
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
' Format without the default precision.
value = Double.MinValue.ToString("G17")
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
' 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.
' -1.79769313486232E+308
Ha .NET keretrendszerben a s kívül esik a Double adattípus tartományán, a Parse(String, IFormatProvider) metódus OverflowException.
A .NET Core 3.0-s és újabb verzióiban nem történik kivétel, ha s kívül esik a Double adattípus tartományán. A legtöbb esetben a metódus vissza Parse(String, IFormatProvider) fog térni Double.PositiveInfinity vagy Double.NegativeInfinity. Van azonban egy kis értékkészlet, amely közelebb van a pozitív vagy negatív végtelennél nagyobb maximális vagy minimális értékekhez Double . Ezekben az esetekben a metódus ad vissza Double.MaxValue vagy Double.MinValue.
Ha egy elemzési művelet során elválasztó elem található a s paraméterben, és a vonatkozó pénznem vagy szám decimális és csoportelválasztói megegyeznek, az elemzési művelet feltételezi, hogy az elválasztó nem csoportelválasztó, hanem decimális elválasztó. Az elválasztókkal kapcsolatos további információkért lásd CurrencyDecimalSeparator: , NumberDecimalSeparator, CurrencyGroupSeparator, és NumberGroupSeparator.
Lásd még
- ToString()
- TryParse
Numerikus sztringek elemzése a .NET
A következőre érvényes:
Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
UTF-8 karakterből álló tartományt elemez egy értékben.
public static double Parse(ReadOnlySpan<byte> utf8Text, System.Globalization.NumberStyles style = System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, IFormatProvider? provider = default);
static member Parse : ReadOnlySpan<byte> * System.Globalization.NumberStyles * IFormatProvider -> double
Public Shared Function Parse (utf8Text As ReadOnlySpan(Of Byte), Optional style As NumberStyles = System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, Optional provider As IFormatProvider = Nothing) As Double
Paraméterek
- utf8Text
- ReadOnlySpan<Byte>
Az elemezni kívánt UTF-8 karakter szélessége.
- style
- NumberStyles
A számstílusok bitenkénti kombinációja, amely jelen lehet a fájlban utf8Text.
- provider
- IFormatProvider
Egy objektum, amely kultúraspecifikus formázási információkat tartalmaz a fájlról utf8Text.
Válaszok
Az elemzés utf8Texteredménye.
Megvalósítás
A következőre érvényes:
Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
Egy adott stílusban és kultúrában megadott formátumban lévő szám sztring-ábrázolását tartalmazó karakterfedezetet alakít át dupla pontosságú lebegőpontos számegyenértékké.
public static double Parse(ReadOnlySpan<char> s, System.Globalization.NumberStyles style = System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, IFormatProvider? provider = default);
public static double Parse(ReadOnlySpan<char> s, System.Globalization.NumberStyles style = System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, IFormatProvider provider = default);
static member Parse : ReadOnlySpan<char> * System.Globalization.NumberStyles * IFormatProvider -> double
Public Shared Function Parse (s As ReadOnlySpan(Of Char), Optional style As NumberStyles = System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, Optional provider As IFormatProvider = Nothing) As Double
Paraméterek
- s
- ReadOnlySpan<Char>
A konvertálni kívánt számot tartalmazó karaktertartomány.
- style
- NumberStyles
Az enumerálási értékek bitenkénti kombinációja, amely a stíluselemeket sjelzi. A megadható tipikus érték össze van Float adva a következővel AllowThousands: .
- provider
- IFormatProvider
Egy objektum, amely a kultúraspecifikus formázási sinformációkat tartalmazza.
Válaszok
Dupla pontosságú lebegőpontos szám, amely megegyezik a megadott numerikus értékkel vagy szimbólummal s.
Megvalósítás
Kivételek
s nem jelent numerikus értéket.
Megjegyzések
A .NET Core 3.0-s és újabb verzióiban az IEEE 754 specifikációja szerint a túl nagy értékek PositiveInfinity vagy NegativeInfinity értékre vannak kerekítve. A korábbi verziókban, beleértve a .NET-keretrendszert is, a túl nagy érték elemzése sikertelenséget eredményezett.
Ha s az adattípus tartományán Double kívül esik, akkor a metódus akkor ad vissza Double.NegativeInfinity értéket, ha s kisebb, mint Double.MinValue és Double.PositiveInfinity ha s nagyobb, mint Double.MaxValue.
A következőre érvényes:
Parse(String, NumberStyles, IFormatProvider)
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
- Forrás:
- Double.cs
Egy szám sztring-ábrázolását egy megadott stílusban és kultúraspecifikus formátumban alakítja át dupla pontosságú lebegőpontos számegyenértékké.
public:
static double Parse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider);
public:
static double Parse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider) = System::Numerics::INumberBase<double>::Parse;
public static double Parse(string s, System.Globalization.NumberStyles style, IFormatProvider provider);
public static double Parse(string s, System.Globalization.NumberStyles style, IFormatProvider? provider);
static member Parse : string * System.Globalization.NumberStyles * IFormatProvider -> double
Public Shared Function Parse (s As String, style As NumberStyles, provider As IFormatProvider) As Double
Paraméterek
- s
- String
Egy átalakítandó számot tartalmazó sztring.
- style
- NumberStyles
Az enumerálási értékek bitenkénti kombinációja, amely a stíluselemeket sjelzi. A megadható tipikus érték össze van Float adva a következővel AllowThousands: .
- provider
- IFormatProvider
Egy objektum, amely a kultúraspecifikus formázási sinformációkat tartalmazza.
Válaszok
Dupla pontosságú lebegőpontos szám, amely megegyezik a megadott numerikus értékkel vagy szimbólummal s.
Megvalósítás
Kivételek
s az null.
s nem jelent numerikus értéket.
csak .NET keretrendszer: sDouble.MinValue vagy nagyobb, mint Double.MaxValue.
Példák
Az alábbi példa azt szemlélteti, hogy a Parse(String, NumberStyles, IFormatProvider) metódus használatával több sztring-ábrázolás is hozzárendelhető egy Temperature objektum hőmérsékleti értékeihez.
using System;
using System.Globalization;
public class Temperature
{
// Parses the temperature from a string. Temperature scale is
// indicated by 'F (for Fahrenheit) or 'C (for Celsius) at the end
// of the string.
public static Temperature Parse(string s, NumberStyles styles,
IFormatProvider provider)
{
Temperature temp = new Temperature();
if (s.TrimEnd(null).EndsWith("'F"))
{
temp.Value = Double.Parse(s.Remove(s.LastIndexOf((char)39), 2),
styles, provider);
}
else
{
if (s.TrimEnd(null).EndsWith("'C"))
temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf((char)39), 2),
styles, provider);
else
temp.Value = Double.Parse(s, styles, provider);
}
return temp;
}
// Declare private constructor so Temperature so only Parse method can
// create a new instance
private Temperature() {}
protected double m_value;
public double Value
{
get { return m_value; }
private set { m_value = value; }
}
public double Celsius
{
get { return (m_value - 32) / 1.8; }
private set { m_value = value * 1.8 + 32; }
}
public double Fahrenheit
{
get {return m_value; }
}
}
public class TestTemperature
{
public static void Main()
{
string value;
NumberStyles styles;
IFormatProvider provider;
Temperature temp;
value = "25,3'C";
styles = NumberStyles.Float;
provider = CultureInfo.CreateSpecificCulture("fr-FR");
temp = Temperature.Parse(value, styles, provider);
Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
temp.Fahrenheit, temp.Celsius);
value = " (40) 'C";
styles = NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite
| NumberStyles.AllowParentheses;
provider = NumberFormatInfo.InvariantInfo;
temp = Temperature.Parse(value, styles, provider);
Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
temp.Fahrenheit, temp.Celsius);
value = "5,778E03'C"; // Approximate surface temperature of the Sun
styles = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands |
NumberStyles.AllowExponent;
provider = CultureInfo.CreateSpecificCulture("en-GB");
temp = Temperature.Parse(value, styles, provider);
Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
temp.Fahrenheit.ToString("N"), temp.Celsius.ToString("N"));
}
}
open System
open System.Globalization
// Declare private constructor so Temperature so only Parse method can create a new instance
type Temperature private () =
let mutable m_value = 0.
member _.Value
with get () = m_value
and private set (value) = m_value <- value
member _.Celsius
with get() = (m_value - 32.) / 1.8
and private set (value) = m_value <- value * 1.8 + 32.
member _.Fahrenheit =
m_value
// Parses the temperature from a string. Temperature scale is
// indicated by 'F (for Fahrenheit) or 'C (for Celsius) at the end
// of the string.
static member Parse(s: string, styles: NumberStyles, provider: IFormatProvider) =
let temp = new Temperature()
if s.TrimEnd(null).EndsWith "'F" then
temp.Value <- Double.Parse(s.Remove(s.LastIndexOf(char 39), 2), styles, provider)
else
if s.TrimEnd(null).EndsWith "'C" then
temp.Celsius <- Double.Parse(s.Remove(s.LastIndexOf(char 39), 2), styles, provider)
else
temp.Value <- Double.Parse(s, styles, provider)
temp
[<EntryPoint>]
let main _ =
let value = "25,3'C"
let styles = NumberStyles.Float
let provider = CultureInfo.CreateSpecificCulture "fr-FR"
let temp = Temperature.Parse(value, styles, provider)
printfn $"{temp.Fahrenheit} degrees Fahrenheit equals {temp.Celsius} degrees Celsius."
let value = " (40) 'C"
let styles = NumberStyles.AllowLeadingWhite ||| NumberStyles.AllowTrailingWhite ||| NumberStyles.AllowParentheses
let provider = NumberFormatInfo.InvariantInfo
let temp = Temperature.Parse(value, styles, provider)
printfn $"{temp.Fahrenheit} degrees Fahrenheit equals {temp.Celsius} degrees Celsius."
let value = "5,778E03'C" // Approximate surface temperature of the Sun
let styles = NumberStyles.AllowDecimalPoint ||| NumberStyles.AllowThousands ||| NumberStyles.AllowExponent
let provider = CultureInfo.CreateSpecificCulture "en-GB"
let temp = Temperature.Parse(value, styles, provider)
printfn $"{temp.Fahrenheit:N} degrees Fahrenheit equals {temp.Celsius:N} degrees Celsius."
0
Imports System.Globalization
Public Class Temperature
' Parses the temperature from a string. Temperature scale is
' indicated by 'F (for Fahrenheit) or 'C (for Celsius) at the end
' of the string.
Public Shared Function Parse(s As String, styles As NumberStyles, _
provider As IFormatProvider) As Temperature
Dim temp As New Temperature()
If s.TrimEnd(Nothing).EndsWith("'F") Then
temp.Value = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), _
styles, provider)
Else
If s.TrimEnd(Nothing).EndsWith("'C") Then
temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), _
styles, provider)
Else
temp.Value = Double.Parse(s, styles, provider)
End If
End If
Return temp
End Function
' Declare private constructor so Temperature so only Parse method can
' create a new instance
Private Sub New
End Sub
Protected m_value As Double
Public Property Value() As Double
Get
Return m_value
End Get
Private Set
m_value = Value
End Set
End Property
Public Property Celsius() As Double
Get
Return (m_value - 32) / 1.8
End Get
Private Set
m_value = Value * 1.8 + 32
End Set
End Property
Public ReadOnly Property Fahrenheit() As Double
Get
Return m_Value
End Get
End Property
End Class
Public Module TestTemperature
Public Sub Main
Dim value As String
Dim styles As NumberStyles
Dim provider As IFormatProvider
Dim temp As Temperature
value = "25,3'C"
styles = NumberStyles.Float
provider = CultureInfo.CreateSpecificCulture("fr-FR")
temp = Temperature.Parse(value, styles, provider)
Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.", _
temp.Fahrenheit, temp.Celsius)
value = " (40) 'C"
styles = NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite _
Or NumberStyles.AllowParentheses
provider = NumberFormatInfo.InvariantInfo
temp = Temperature.Parse(value, styles, provider)
Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.", _
temp.Fahrenheit, temp.Celsius)
value = "5,778E03'C" ' Approximate surface temperature of the Sun
styles = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands Or _
NumberStyles.AllowExponent
provider = CultureInfo.CreateSpecificCulture("en-GB")
temp = Temperature.Parse(value, styles, provider)
Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.", _
temp.Fahrenheit.ToString("N"), temp.Celsius.ToString("N"))
End Sub
End Module
Megjegyzések
A .NET Core 3.0-s és újabb verzióiban az IEEE 754 specifikációja szerint a túl nagy értékek PositiveInfinity vagy NegativeInfinity értékre vannak kerekítve. A korábbi verziókban, beleértve a .NET-keretrendszert is, a túl nagy érték elemzése sikertelenséget eredményezett.
A style paraméter meghatározza azokat a stíluselemeket (például a szóközöket, az ezres elválasztójeleket és a s pénznemszimbólumokat), amelyek az elemzési művelet sikeres végrehajtásához engedélyezve vannak a paraméterben. Az enumerálás bitjelölőinek kombinációjának NumberStyles kell lennie. A következő NumberStyles tagok nem támogatottak:
A s paraméter tartalmazhat NumberFormatInfo.PositiveInfinitySymbol, NumberFormatInfo.NegativeInfinitySymbolvagy NumberFormatInfo.NaNSymbol szimbólumot a megadott kultúrához provider. Ez a sztring-összehasonlítás nem érzéketlen a .NET Core 3.0-s és újabb verzióiban, de a korábbi verziókban, például a .NET-keretrendszerben megkülönbözteti a kis- és nagybetűket. A paraméter az értéktől styles függően a következő formát is öltheti:
[ws] [$] [jel][integral-digits;]integral-digits[.[ törtjegyek]][E[jel]exponenciális számjegyek][ws]
A szögletes zárójelekbe ([ és ]) keretezett elemek nem kötelezőek. Az alábbi táblázat az egyes elemeket ismerteti.
| Elem | Leírás |
|---|---|
| Ws | Üres karakterek sorozata. Ha a jelölőt is magában foglalja, akkor az elején sstyle fehér terület jelenhet meg, és az adott jelölő végén NumberStyles.AllowLeadingWhitesstyle is megjelenhet.NumberStyles.AllowTrailingWhite |
| $ | Kultúraspecifikus pénznemszimbólum. A sztringben elfoglalt helyét az NumberFormatInfo.CurrencyNegativePattern aktuális kultúra és NumberFormatInfo.CurrencyPositivePattern tulajdonságai határozzák meg. Az aktuális kultúra pénznemszimbóluma akkor jelenhet meg, s ha style tartalmazza a jelölőt NumberStyles.AllowCurrencySymbol . |
| jel | Negatív jelszimbólum (-) vagy pozitív jelszimbólum (+). A jel a jelölőt is magában foglaló tábla elején sstyle jelenhet meg, és a jelző végén NumberStyles.AllowLeadingSignsstyle is megjelenik.NumberStyles.AllowTrailingSign Zárójelekkel negatív értéket jelölhet s , ha style a NumberStyles.AllowParentheses jelölőt is tartalmazza. |
| integráljegyek | 0 és 9 közötti számjegyek sorozata, amelyek a szám szerves részét határozzák meg. Az integráljegyek elem hiányzik, ha a sztring tartalmazza a törtjegy elemet. |
| , | Egy kultúraspecifikus csoportelválasztó. A jelenlegi kultúra csoportelválasztó szimbóluma akkor jelenhet meg, s ha style a jelölőt NumberStyles.AllowThousands is tartalmazza |
| . | Kultúraspecifikus tizedesjel. Az aktuális kultúra tizedesjele akkor jelenhet meg, s ha style tartalmazza a jelölőt NumberStyles.AllowDecimalPoint . |
| törtjegyek | 0 és 9 közötti számjegysorozat, amely a szám törtrészét adja meg. A tört számjegyek akkor jelenhetnek meg, s ha style a jelölőt NumberStyles.AllowDecimalPoint is tartalmazzák. |
| E | Az "e" vagy "E" karakter, amely azt jelzi, hogy az érték exponenciális (tudományos) jelölésben jelenik meg. A s paraméter exponenciális jelöléssel jelölhet egy számot, ha style tartalmazza a jelölőt NumberStyles.AllowExponent . |
| exponenciális számjegyek | 0 és 9 közötti számjegysorozat, amely kitevőt határoz meg. |
Note
A befejező NUL (U+0000) karaktereket s az elemzési művelet figyelmen kívül hagyja, függetlenül az style argumentum értékétől.
A csak számjegyeket tartalmazó sztring (amely megfelel a NumberStyles.None stílusnak) mindig sikeresen elemzi, ha a típus tartományában Double van. A többi System.Globalization.NumberStyles tag a bemeneti sztringben esetleg jelen lévő, de nem kötelező elemeket vezérli. Az alábbi táblázat azt mutatja be, hogy az egyes NumberStyles jelölők hogyan befolyásolják a lehetséges selemeket.
| NumberStyles érték | A számjegyeken kívül engedélyezett s elemek |
|---|---|
| None | Csak az integráljegyek elem. |
| AllowDecimalPoint | A tizedesjel (.) és a törtjegyű elemek. |
| AllowExponent | Az "e" vagy "E" karakter, amely exponenciális jelölést jelez. Ez a jelző önmagában támogatja az E számjegyek űrlapjáhozmegadottértékeket; További jelzőkre van szükség a sztringek sikeres elemzéséhez olyan elemekkel, mint a pozitív vagy negatív jelek és a tizedesjelek. |
| AllowLeadingWhite | A ws elem az elején s. |
| AllowTrailingWhite | A ws elem a végén s. |
| AllowLeadingSign | A tábla elején lévő s. |
| AllowTrailingSign | A jelelem a végén s. |
| AllowParentheses | A numerikus értéket tartalmazó zárójelek formájában megjelenő jelelem . |
| AllowThousands | Az ezres elválasztó (,) elem. |
| AllowCurrencySymbol | A pénznem ($) elem. |
| Currency | Minden elem.
s Nem jelölhet azonban hexadecimális számot vagy exponenciális számokat. |
| Float | A ws elem az elején vagy végén s, a jel elején s, és a tizedesjel (.) szimbólum. A s paraméter exponenciális jelölést is használhat. |
| Number | A ws, sign, ezres elválasztó (,) és decimális pont (.) elemek. |
| Any | Minden elem.
s A hexadecimális szám azonban nem jelölhető. |
A provider paraméter egy IFormatProvider implementáció, amelynek GetFormat metódusa egy NumberFormatInfo objektumot ad vissza, amely a formátum értelmezéséhez használt kultúraspecifikus információkat szolgáltatja s. Általában egy vagy NumberFormatInfo több CultureInfo objektumról van szó. Ha provider igen null , vagy NumberFormatInfo nem érhető el, a rendszer az aktuális rendszerkultúra formázási adatait használja.
Általában, ha a Double.Parse metódus meghívásával létrehozott sztringet ad át a Double.ToString metódusnak, az eredeti Double érték lesz visszaadva. A pontosság elvesztése miatt azonban előfordulhat, hogy az értékek nem lesznek egyenlők. Ezen kívül megpróbálhatja elemezni a sztring megjelenítését, MinValue vagy Double.MaxValue nem sikerül az oda-vissza út. A .NET-keretrendszeren egy OverflowException dob. .NET Core 3.0-s és újabb verzióiban Double.NegativeInfinity ad vissza, ha MinValue vagy Double.PositiveInfinity próbál elemezni MaxValue. Az alábbi példa egy illusztrációt tartalmaz.
string value;
value = Double.MinValue.ToString();
try {
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException) {
Console.WriteLine($"{value} is outside the range of the Double type.");
}
value = Double.MaxValue.ToString();
try {
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException) {
Console.WriteLine($"{value} is outside the range of the Double type.");
}
// Format without the default precision.
value = Double.MinValue.ToString("G17");
try
{
Console.WriteLine(Double.Parse(value));
}
catch (OverflowException)
{
Console.WriteLine($"{value} is outside the range of the Double type.");
}
// 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.
// -1.79769313486232E+308
open System
[<EntryPoint>]
let main _ =
let value = string Double.MinValue
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
let value = string Double.MaxValue
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
// Format without the default precision.
let value = Double.MinValue.ToString "G17"
try
printfn $"{Double.Parse value}"
with :? OverflowException ->
printfn $"{value} is outside the range of the Double type."
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.
// -1.79769313486232E+308
Dim value As String
value = Double.MinValue.ToString()
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
value = Double.MaxValue.ToString()
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
' Format without the default precision.
value = Double.MinValue.ToString("G17")
Try
Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
Console.WriteLine($"{value} is outside the range of the Double type.")
End Try
' 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.
' -1.79769313486232E+308
Ha .NET keretrendszerben a s kívül esik a Double adattípus tartományán, a Parse(String, NumberStyles, IFormatProvider) metódus OverflowException.
A .NET Core 3.0-s és újabb verzióiban nem történik kivétel, ha s kívül esik a Double adattípus tartományán. A legtöbb esetben a metódus vissza Parse(String, NumberStyles, IFormatProvider) fog térni Double.PositiveInfinity vagy Double.NegativeInfinity. Van azonban egy kis értékkészlet, amely közelebb van a pozitív vagy negatív végtelennél nagyobb maximális vagy minimális értékekhez Double . Ezekben az esetekben a metódus ad vissza Double.MaxValue vagy Double.MinValue.
Ha egy elemzési művelet során elválasztó elem található a s paraméterben, és a vonatkozó pénznem vagy szám decimális és csoportelválasztói megegyeznek, az elemzési művelet feltételezi, hogy az elválasztó nem csoportelválasztó, hanem decimális elválasztó. Az elválasztókkal kapcsolatos további információkért lásd CurrencyDecimalSeparator: , NumberDecimalSeparator, CurrencyGroupSeparator, és NumberGroupSeparator.
Lásd még
- ToString()
Numerikus sztringek elemzése a .NET