Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Typ Decimal hodnoty představuje desetinná čísla od kladných 79 228 162 514 264 337 593 543 950 2 335 až záporná 79 228 162 514 264 337 593 543 950 335. Výchozí hodnota je Decimal 0. Typ Decimal hodnoty je vhodný pro finanční výpočty, které vyžadují velký počet významných integrálních a desetinných číslic a bez chyb zaokrouhlení. Typ Decimal neodstraní potřebu zaokrouhlování. Minimalizuje chyby způsobené zaokrouhlováním. Například následující kód vytvoří výsledek 0,99999999999999999999999999999 místo 1.
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor);
let dividend = Decimal.One
let divisor = 3m
// The following displays 0.9999999999999999999999999999 to the console
printfn $"{dividend/divisor * divisor}"
Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor)
Když je výsledek dělení a násobení předán metodě Round , výsledek nebude mít žádnou ztrátu přesnosti, jak ukazuje následující kód.
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2));
let dividend = Decimal.One
let divisor = 3m
// The following displays 1.00 to the console
printfn $"{Math.Round(dividend/divisor * divisor, 2)}"
Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2))
Desetinné číslo je hodnota s plovoucí desetinnou čárkou, která se skládá ze znaménka, číselné hodnoty, kde každá číslice v rozsahu hodnot je od 0 do 9, a koeficient, který označuje pozici desetinné čárky s plovoucí desetinnou čárkou, která odděluje integrální a zlomkové části číselné hodnoty.
Binární reprezentace Decimal hodnoty je o velikosti 128 bitů, která se skládá z 96bitového celočíselného čísla a 32bitové sady příznaků, která představuje aspekty jako znaménko a měřítko použité k určení, která část je desetinná. Proto binární reprezentace Decimal hodnoty, (-296 až 296) / 10(0 až 28)), kde -(296-1) se rovná MinValue, a 296-1 se rovná MaxValue. Další informace o binární reprezentaci Decimal hodnot a příkladu naleznete v Decimal(Int32[]) konstruktoru GetBits a metodě.
Faktor škálování také zachovává koncové nuly v Decimal čísle. Koncové nuly nemají vliv na hodnotu Decimal čísla v aritmetických operacích ani operací porovnání. Koncové nuly však může metoda odhalit ToString , pokud je použit odpovídající formátovací řetězec.
Důležité informace o převodu
Tento typ poskytuje metody, které převádějí Decimal hodnoty na a z SByte, , Int16Int32, Int64, Byte, UInt16UInt32a UInt64 hodnoty. Převody z těchto integrálních typů na Decimal jsou rozšiřující převody, které nikdy nepřijdou o informace nebo nevyvolají výjimky.
Převody z Decimal libovolného celočíselného typu jsou zužující převody, které zaokrouhlují Decimal hodnotu na nejbližší celočíselnou hodnotu směrem k nule. Některé jazyky, například C#, podporují také převod Decimal hodnot na Char hodnoty. Pokud výsledek těchto převodů nelze reprezentovat v cílovém typu, je vyvolána výjimka OverflowException.
Tento Decimal typ také poskytuje metody, které převádějí Decimal hodnoty na Single a Double hodnoty a zpět. Převody z Decimal na Single nebo Double jsou zužující převody, které mohou ztratit přesnost, ale ne informaci o velikosti převedené hodnoty. Převod nevyvolá výjimku.
Převody z Single nebo Double na Decimal vyvolají OverflowException výjimku, pokud výsledek převodu nelze vyjádřit jako Decimal.
Provádění operací s desetinnými hodnotami
Typ Decimal podporuje standardní matematické operace, jako je sčítání, odčítání, dělení, násobení a unární negace. Můžete také pracovat přímo s binární reprezentací Decimal hodnoty voláním GetBits metody.
K porovnání dvou Decimal hodnot můžete použít standardní číselné relační operátory, nebo můžete volat metodu CompareTo nebo metodu Equals.
Můžete také volat členy třídy Math, abyste provedli širokou škálu číselných operací, včetně získání absolutní hodnoty čísla, určení maximální nebo minimální hodnoty dvou hodnot Decimal, určení znaménka čísla a zaokrouhlení čísla.
Příklady
Následující příklad kódu ukazuje použití Decimal.
/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
class PiggyBank {
protected decimal MyFortune;
public void AddPenny() {
MyFortune = Decimal.Add(MyFortune, .01m);
}
public decimal Capacity {
get {
return Decimal.MaxValue;
}
}
public decimal Dollars {
get {
return Decimal.Floor(MyFortune);
}
}
public decimal Cents {
get {
return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
}
}
public override string ToString() {
return MyFortune.ToString("C")+" in piggy bank";
}
}
/// Keeping my fortune in Decimals to avoid the round-off errors.
type PiggyBank() =
let mutable myFortune = 0m
member _.AddPenny() =
myFortune <- Decimal.Add(myFortune, 0.01m)
member _.Capacity =
Decimal.MaxValue
member _.Dollars =
Decimal.Floor myFortune
member _.Cents =
Decimal.Subtract(myFortune, Decimal.Floor myFortune)
override _.ToString() =
$"{myFortune:C} in piggy bank"
' Keeping my fortune in Decimals to avoid the round-off errors.
Class PiggyBank
Protected MyFortune As Decimal
Public Sub AddPenny()
MyFortune = [Decimal].Add(MyFortune, 0.01D)
End Sub
Public ReadOnly Property Capacity() As Decimal
Get
Return [Decimal].MaxValue
End Get
End Property
Public ReadOnly Property Dollars() As Decimal
Get
Return [Decimal].Floor(MyFortune)
End Get
End Property
Public ReadOnly Property Cents() As Decimal
Get
Return [Decimal].Subtract(MyFortune, [Decimal].Floor(MyFortune))
End Get
End Property
Public Overrides Function ToString() As String
Return MyFortune.ToString("C") + " in piggy bank"
End Function
End Class