Decimal Структура
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет десятичное число с плавающей запятой.
public value class System::Decimal : IComparable, IComparable<System::Decimal>, IConvertible, IEquatable<System::Decimal>, IFormattable
public value class System::Decimal : IComparable, IComparable<System::Decimal>, IConvertible, IEquatable<System::Decimal>, IFormattable, System::Runtime::Serialization::IDeserializationCallback, System::Runtime::Serialization::ISerializable
public value class System::Decimal : IComparable, IComparable<System::Decimal>, IConvertible, IEquatable<System::Decimal>, ISpanFormattable, System::Runtime::Serialization::IDeserializationCallback, System::Runtime::Serialization::ISerializable
public value class System::Decimal : IComparable, IComparable<System::Decimal>, IConvertible, IEquatable<System::Decimal>, IFormattable, System::Runtime::Serialization::IDeserializationCallback
public value class System::Decimal : IComparable, IConvertible, IFormattable
public value class System::Decimal : IComparable, IComparable<System::Decimal>, IEquatable<System::Decimal>, IFormattable
public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable
public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, ISpanFormattable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable, System.Runtime.Serialization.IDeserializationCallback
[System.Serializable]
public struct Decimal : IComparable, IConvertible, IFormattable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable, System.Runtime.Serialization.IDeserializationCallback
public struct Decimal : IComparable, IComparable<decimal>, IEquatable<decimal>, IFormattable
type decimal = struct
interface IConvertible
interface IFormattable
type decimal = struct
interface IConvertible
interface IFormattable
interface IDeserializationCallback
interface ISerializable
type decimal = struct
interface IConvertible
interface ISpanFormattable
interface IFormattable
interface IDeserializationCallback
interface ISerializable
type decimal = struct
interface IConvertible
interface IFormattable
interface IDeserializationCallback
[<System.Serializable>]
type decimal = struct
interface IFormattable
interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type decimal = struct
interface IFormattable
interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type decimal = struct
interface IFormattable
interface IConvertible
interface IDeserializationCallback
type decimal = struct
interface IFormattable
Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IConvertible, IEquatable(Of Decimal), IFormattable
Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IConvertible, IDeserializationCallback, IEquatable(Of Decimal), IFormattable, ISerializable
Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IConvertible, IDeserializationCallback, IEquatable(Of Decimal), ISerializable, ISpanFormattable
Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IConvertible, IDeserializationCallback, IEquatable(Of Decimal), IFormattable
Public Structure Decimal
Implements IComparable, IConvertible, IFormattable
Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IEquatable(Of Decimal), IFormattable
- Наследование
- Атрибуты
- Реализации
Примеры
В следующем коде показано использование функции Decimal.
/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
public ref class PiggyBank
{
protected:
Decimal MyFortune;
public:
void AddPenny()
{
MyFortune = System::Decimal::Add( MyFortune, Decimal(.01) );
}
System::Decimal Capacity()
{
return MyFortune.MaxValue;
}
Decimal Dollars()
{
return Decimal::Floor( MyFortune );
}
Decimal Cents()
{
return Decimal::Subtract( MyFortune, Decimal::Floor( MyFortune ) );
}
virtual System::String^ ToString() override
{
return MyFortune.ToString("C")+" in piggy bank";
}
};
}
/// <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.
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
Комментарии
DecimalТип значения представляет десятичные числа в диапазоне от плюс 79,228,162,514,264,337,593,543,950,335 до минус 79,228,162,514,264,337,593,543,950,335. Значение по умолчанию Decimal
равно 0. DecimalТип значения подходит для финансовых вычислений, требующих большого числа значащих цифр целой и дробной части и отсутствия ошибок округления. DecimalТип не устраняет необходимость округления. Но он сводит к минимуму ошибки, возникающие из-за округления. Например, следующий код создает результат 0.9999999999999999999999999999 вместо 1.
using namespace System;
void main()
{
Decimal dividend = Decimal::One;
Decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console::WriteLine(dividend/divisor * divisor);
}
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(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)
Когда результат деления и умножения передается в Round метод, результат не теряет точности, как показано в следующем коде.
using namespace System;
void main()
{
Decimal dividend = Decimal::One;
Decimal divisor = 3;
// The following displays 1.00 to the console
Console::WriteLine(Math::Round(dividend/divisor * divisor, 2));
}
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 1.00 to the console
Console.WriteLine(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))
Десятичное число — это значение с плавающей запятой, состоящее из знака, числового значения, где каждая цифра в диапазоне от 0 до 9, и коэффициент масштабирования, указывающий позицию плавающей десятичной запятой, разделяющую целую и дробную части числового значения.
Двоичное представление Decimal
значения — 128-бит, состоящий из 96-разрядного целого числа, и 32-bit набор флагов, представляющих такие вещи, как знак и коэффициент масштабирования, используемый для указания того, какая часть является десятичной дробью. Таким образом, двоичное представление Decimal значения в форме ((от-296 до 296)/10(от 0 до 28)), где-(296-1) равно MinValue , а 296-1 равно MaxValue . Дополнительные сведения о двоичном представлении Decimal значений и пример см. в разделе Decimal(Int32[]) конструктор и GetBits метод.
Коэффициент масштабирования также сохраняет конечные нули в Decimal числе. Замыкающие нули не влияют на значение Decimal числа в арифметической операции или операциях сравнения. Однако замыкающие нули могут быть отображены ToString методом, если применяется соответствующая строка формата.
Рекомендации по преобразованию
Этот тип предоставляет методы, которые преобразуют Decimal значения в значения,,,,,,, и из значений,,,,,, SByte Int16 Int32 Int64 Byte UInt16 UInt32 и UInt64 . Преобразования из этих целочисленных типов в Decimal расширяют преобразования, которые никогда не теряют информацию или создают исключения.
Преобразования из Decimal в любой из целочисленных типов являются сужающими преобразованиями, которые округляют Decimal значение до ближайшего целого числа в сторону нуля. Некоторые языки, такие как C#, также поддерживают преобразование Decimal значений в Char значения. Если результат этих преобразований не может быть представлен в целевом типе, OverflowException возникает исключение.
DecimalТип также предоставляет методы, которые преобразуют Decimal значения в значения и Single из Double значений и. Преобразования из Decimal в Single или Double являются сужающими преобразованиями, которые могут потерять точность, но не сведения о величине преобразованного значения. Преобразование не создает исключение.
Преобразования из Single или Double для Decimal выдачи OverflowException исключения, если результат преобразования не может быть представлен как Decimal .
Выполнение операций с десятичными значениями
DecimalТип поддерживает стандартные математические операции, такие как сложение, вычитание, деление, умножение и унарное отрицание. Вы также можете напрямую работать с двоичным представлением Decimal значения, вызвав GetBits метод.
Для сравнения двух Decimal значений можно использовать стандартные операторы числового сравнения или вызвать CompareTo Equals метод или.
Также можно вызывать члены Math класса для выполнения широкого спектра числовых операций, включая получение абсолютного значения числа, определение максимального или минимального значения двух Decimal значений, получение знака числа и округление числа.
Конструкторы
Decimal(Double) |
Инициализирует новый экземпляр Decimal, используя значение заданного числа двойной точности с плавающей запятой. |
Decimal(Int32) |
Инициализирует новый экземпляр Decimal, используя значение указанного 32-разрядного целого числа со знаком. |
Decimal(Int32, Int32, Int32, Boolean, Byte) |
Инициализирует новый экземпляр Decimal на основе параметров, задающих составные части экземпляра. |
Decimal(Int32[]) |
Инициализирует новый экземпляр Decimal с представленным в двоичном виде десятичным значением, содержащимся в указанном массиве. |
Decimal(Int64) |
Инициализирует новый экземпляр Decimal, используя значение указанного 64-разрядного целого числа со знаком. |
Decimal(ReadOnlySpan<Int32>) |
Инициализирует новый экземпляр Decimal с представленным в двоичном виде десятичным значением, содержащимся в указанном диапазоне. |
Decimal(Single) |
Инициализирует новый экземпляр Decimal, используя значение заданного числа одиночной точности с плавающей запятой. |
Decimal(UInt32) |
Инициализирует новый экземпляр Decimal, используя значение указанного 32-разрядного целого числа без знака. |
Decimal(UInt64) |
Инициализирует новый экземпляр Decimal, используя значение указанного 64-разрядного целого числа без знака. |
Поля
MaxValue |
Представляет наибольшее возможное значение типа Decimal. В этом поле содержится константа, и оно доступно только для чтения. |
MinusOne |
Представляет число минус один (-1). |
MinValue |
Представляет минимально допустимое значение типа Decimal. В этом поле содержится константа, и оно доступно только для чтения. |
One |
Представляет число один (1). |
Zero |
Представляет число нуль (0). |
Методы
Add(Decimal, Decimal) |
Суммирует два заданных значения типа Decimal. |
Ceiling(Decimal) |
Возвращает наименьшее целое число, которое больше или равно заданному десятичному числу. |
Compare(Decimal, Decimal) |
Сравнивает два заданных значения Decimal. |
CompareTo(Decimal) |
Сравнивает этот экземпляр с заданным объектом Decimal и возвращает сравнение значений этих объектов. |
CompareTo(Object) |
Сравнивает этот экземпляр с заданным объектом и возвращает сравнение значений этих объектов. |
Divide(Decimal, Decimal) |
Выполняет деление двух заданных значений типа Decimal. |
Equals(Decimal) |
Возвращает значение, позволяющее определить, представляют ли этот экземпляр и заданный объект Decimal одно и то же значение. |
Equals(Decimal, Decimal) |
Возвращает значение, позволяющее определить, представляют ли два заданных экземпляра Decimal равные значения. |
Equals(Object) |
Возвращает значение, позволяющее определить, представляют ли этот экземпляр и заданный объект Object равные значения и типы. |
Floor(Decimal) |
Округляет заданное число типа Decimal до ближайшего целого в направлении минус бесконечности. |
FromOACurrency(Int64) |
Преобразует заданное 64-разрядное целое число со знаком, соответствующее значению денежного типа OLE-автоматизации, в эквивалентное значение типа Decimal. |
GetBits(Decimal) |
Преобразует значение заданного экземпляра Decimal в эквивалентное ему двоичное представление. |
GetBits(Decimal, Span<Int32>) |
Преобразует значение заданного экземпляра Decimal в эквивалентное ему двоичное представление. |
GetHashCode() |
Возвращает хэш-код данного экземпляра. |
GetTypeCode() | |
Multiply(Decimal, Decimal) |
Умножает два заданных значения Decimal. |
Negate(Decimal) |
Возвращает результат умножения заданного значения Decimal на минус единицу. |
Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider) |
Преобразует представление числа в виде диапазона в его эквивалент Decimal, используя заданный стиль и формат для языка и региональных параметров. |
Parse(String) |
Преобразует строковое представление числа в его эквивалент типа Decimal. |
Parse(String, IFormatProvider) |
Преобразует строковое представление числа в его эквивалент Decimal, используя заданные сведения о формате для языка и региональных параметров. |
Parse(String, NumberStyles) |
Преобразует строковое представление числа с указанным стилем в его эквивалент в формате Decimal. |
Parse(String, NumberStyles, IFormatProvider) |
Преобразует строковое представление числа в его эквивалент Decimal, используя заданный стиль и формат для языка и региональных параметров. |
Remainder(Decimal, Decimal) |
Вычисляет остаток после деления двух значений типа Decimal. |
Round(Decimal) |
Округляет десятичное значение до ближайшего целого. |
Round(Decimal, Int32) |
Округляет значение Decimal до указанного числа десятичных знаков. |
Round(Decimal, Int32, MidpointRounding) |
Округляет десятичное значение до указанной точности, используя указанную стратегию округления. |
Round(Decimal, MidpointRounding) |
Округляет десятичное значение до целого числа, используя указанную стратегию округления. |
Subtract(Decimal, Decimal) |
Вычитает одно указанное значение типа Decimal из другого. |
ToByte(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное 8-разрядное целое число без знака. |
ToDouble(Decimal) |
Преобразует значение заданного значения типа Decimal в эквивалентное число двойной точности с плавающей запятой. |
ToInt16(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное 16-разрядное число со знаком. |
ToInt32(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное 32-разрядное целое число со знаком. |
ToInt64(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное 64-разрядное целое число со знаком. |
ToOACurrency(Decimal) |
Преобразует заданное значение Decimal в эквивалентное значение денежного типа OLE-автоматизации, в котором содержится 64-разрядное целое число со знаком. |
ToSByte(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное 8-разрядное целое число со знаком. |
ToSingle(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное число одиночной точности с плавающей запятой. |
ToString() |
Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление. |
ToString(IFormatProvider) |
Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление с использованием указанных сведений об особенностях форматирования для данного языка и региональных параметров. |
ToString(String) |
Преобразует числовое значение данного экземпляра в эквивалентное строковое представление с использованием указанного формата. |
ToString(String, IFormatProvider) |
Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление с использованием указанного формата и сведений об особенностях форматирования для данного языка и региональных параметров. |
ToUInt16(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное 16-разрядное целое число без знака. |
ToUInt32(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное 32-разрядное целое число без знака. |
ToUInt64(Decimal) |
Преобразует значение заданного объекта типа Decimal в эквивалентное 64-разрядное целое число без знака. |
Truncate(Decimal) |
Возвращает цифры целой части заданного значения типа Decimal; все цифры дробной части удаляются. |
TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Пытается отформатировать значение текущего экземпляра десятичного числа в указанный диапазон символов. |
TryGetBits(Decimal, Span<Int32>, Int32) |
Пытается преобразовать значение заданного экземпляра Decimal в эквивалентное ему двоичное представление. |
TryParse(ReadOnlySpan<Char>, Decimal) |
Преобразует представление числа в виде диапазона в его эквивалент Decimal, используя заданный стиль и формат для языка и региональных параметров. Возвращает значение, указывающее, успешно ли выполнено преобразование. |
TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Decimal) |
Преобразует представление числа в виде диапазона в его эквивалент Decimal, используя заданный стиль и формат для языка и региональных параметров. Возвращает значение, указывающее, успешно ли выполнено преобразование. |
TryParse(String, Decimal) |
Преобразует строковое представление числа в его эквивалент типа Decimal. Возвращает значение, указывающее, успешно ли выполнено преобразование. |
TryParse(String, NumberStyles, IFormatProvider, Decimal) |
Преобразует строковое представление числа в его эквивалент Decimal, используя заданный стиль и формат для языка и региональных параметров. Возвращает значение, указывающее, успешно ли выполнено преобразование. |
Операторы
Addition(Decimal, Decimal) |
Суммирует два заданных значения типа Decimal. |
Decrement(Decimal) |
Уменьшает операнд типа Decimal на единицу. |
Division(Decimal, Decimal) |
Выполняет деление двух заданных значений типа Decimal. |
Equality(Decimal, Decimal) |
Возвращает значение, определяющее, равны ли два значения Decimal. |
Explicit(Decimal to Byte) |
Определяет явное преобразование Decimalв 8-разрядное целое число со знаком. |
Explicit(Decimal to Char) |
Определяет явное преобразование объекта Decimal в символ Юникод. |
Explicit(Decimal to Double) |
Определяет явное преобразование Decimal в число с плавающей запятой двойной точности. |
Explicit(Decimal to Int16) |
Определяет явное преобразование Decimal в 16-разрядное целое число со знаком. |
Explicit(Decimal to Int32) |
Определяет явное преобразование Decimal в 32-разрядное целое число со знаком. |
Explicit(Decimal to Int64) |
Определяет явное преобразование Decimal в 64-разрядное целое число со знаком. |
Explicit(Decimal to SByte) |
Определяет явное преобразование Decimal в 8-разрядное целое число со знаком. Этот интерфейс API CLS-несовместим. |
Explicit(Decimal to Single) |
Определяет явное преобразование Decimal в число с плавающей запятой одинарной точности. |
Explicit(Decimal to UInt16) |
Определяет явное преобразование Decimalв 16-разрядное целое число со знаком. Этот интерфейс API CLS-несовместим. |
Explicit(Decimal to UInt32) |
Определяет явное преобразование Decimal в 32-разрядное целое число без знака. Этот интерфейс API CLS-несовместим. |
Explicit(Decimal to UInt64) |
Определяет явное преобразование Decimal в 64-разрядное целое число без знака. Этот интерфейс API CLS-несовместим. |
Explicit(Double to Decimal) |
Определяет явное преобразование числа с плавающей запятой двойной точности в Decimal. |
Explicit(Single to Decimal) |
Определяет явное преобразование числа с плавающей запятой одинарной точности в Decimal. |
GreaterThan(Decimal, Decimal) |
Возвращает значение, позволяющее определить, действительно ли заданное значение типа Decimal больше другого заданного значения типа Decimal. |
GreaterThanOrEqual(Decimal, Decimal) |
Возвращает значение, позволяющее определить, действительно ли заданное значение типа Decimal больше или равно другому заданному значению типа Decimal. |
Implicit(Byte to Decimal) |
Определяет неявное преобразование 8-разрядного целого числа без знака в значение типа Decimal. |
Implicit(Char to Decimal) |
Определяет неявное преобразование символа Юникода в значение типа Decimal. |
Implicit(Int16 to Decimal) |
Определяет неявное преобразование 16-разрядного целого числа со знаком в значение типа Decimal. |
Implicit(Int32 to Decimal) |
Определяет неявное преобразование 32-разрядного целого числа со знаком в значение типа Decimal. |
Implicit(Int64 to Decimal) |
Определяет неявное преобразование 64-разрядного целого числа со знаком в значение типа Decimal. |
Implicit(SByte to Decimal) |
Определяет неявное преобразование 8-разрядного целого числа со знаком в значение типа Decimal. Этот интерфейс API CLS-несовместим. |
Implicit(UInt16 to Decimal) |
Определяет неявное преобразование 16-разрядного целого числа без знака в значение типа Decimal. Этот интерфейс API CLS-несовместим. |
Implicit(UInt32 to Decimal) |
Определяет неявное преобразование 32-разрядного целого числа без знака в значение типа Decimal. Этот интерфейс API CLS-несовместим. |
Implicit(UInt64 to Decimal) |
Определяет неявное преобразование 64-разрядного целого числа без знака в значение типа Decimal. Этот интерфейс API CLS-несовместим. |
Increment(Decimal) |
Увеличивает операнд Decimal на 1. |
Inequality(Decimal, Decimal) |
Возвращает значение, указывающее, имеют ли два объекта Decimal различные значения. |
LessThan(Decimal, Decimal) |
Возвращает значение, позволяющее определить, действительно ли заданное значение типа Decimal меньше другого заданного значения типа Decimal. |
LessThanOrEqual(Decimal, Decimal) |
Возвращает значение, позволяющее определить, действительно ли заданное значение типа Decimal меньше или равно другому заданному значению типа Decimal. |
Modulus(Decimal, Decimal) |
Возвращает остаток от деления двух заданных значений Decimal. |
Multiply(Decimal, Decimal) |
Умножает два заданных значения типа Decimal. |
Subtraction(Decimal, Decimal) |
Находит разность двух заданных значений типа Decimal. |
UnaryNegation(Decimal) |
Делает отрицательным значение заданного операнда типа Decimal. |
UnaryPlus(Decimal) |
Возвращает значение операнда Decimal (знак операнда при этом не меняется). |
Явные реализации интерфейса
Применяется к
Потокобезопасность
Все члены этого типа являются потокобезопасными. Члены, которые могут изменить состояние экземпляра, в действительности возвращают новый экземпляр, инициализированный новым значением. Как с любым другим типом, чтение и запись общей переменной, которая содержит экземпляр этого типа, должны быть защищены блокировкой для обеспечения потокобезопасности.