DECIMAL
struct DECIMAL
The DECIMAL structure represents a decimal data type that provides a sign and scale for a number.
using System;
using System.CodeDom.Compiler;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace Windows.Win32.Foundation
{
[GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
internal struct DECIMAL
{
[StructLayout(LayoutKind.Explicit)]
[GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
internal struct _Anonymous1_e__Union
{
[GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
internal struct _Anonymous_e__Struct
{
internal byte scale;
internal byte sign;
}
[FieldOffset(0)]
internal _Anonymous_e__Struct Anonymous;
[FieldOffset(0)]
internal ushort signscale;
}
[StructLayout(LayoutKind.Explicit)]
[GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
internal struct _Anonymous2_e__Union
{
[GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
internal struct _Anonymous_e__Struct
{
internal uint Lo32;
internal uint Mid32;
}
[FieldOffset(0)]
internal _Anonymous_e__Struct Anonymous;
[FieldOffset(0)]
internal ulong Lo64;
}
internal ushort wReserved;
internal _Anonymous1_e__Union Anonymous1;
internal uint Hi32;
internal _Anonymous2_e__Union Anonymous2;
[IsReadOnly]
public decimal ToDecimal()
{
return new decimal((int)Anonymous2.Anonymous.Lo32, (int)Anonymous2.Anonymous.Mid32, (int)Hi32, Anonymous1.Anonymous.sign == 128, Anonymous1.Anonymous.scale);
}
public unsafe DECIMAL(decimal value)
{
Span<int> destination = new Span<int>(stackalloc byte[16], 4);
decimal.GetBits(value, destination);
uint lo = (uint)destination[0];
uint mid = (uint)destination[1];
uint hi = (uint)destination[2];
byte scale = (byte)(destination[3] >> 16);
byte sign = (byte)(((destination[3] & -2147483648) == -2147483648) ? 128 : 0);
Anonymous2 = new _Anonymous2_e__Union {
Anonymous = new _Anonymous2_e__Union._Anonymous_e__Struct {
Lo32 = lo,
Mid32 = mid
}
};
Hi32 = hi;
Anonymous1 = new _Anonymous1_e__Union {
Anonymous = new _Anonymous1_e__Union._Anonymous_e__Struct {
scale = scale,
sign = sign
}
};
wReserved = 0;
}
public static implicit operator decimal(DECIMAL value)
{
return new decimal((int)value.Anonymous2.Anonymous.Lo32, (int)value.Anonymous2.Anonymous.Mid32, (int)value.Hi32, value.Anonymous1.Anonymous.sign == 128, value.Anonymous1.Anonymous.scale);
}
public static implicit operator DECIMAL(decimal value)
{
return new DECIMAL(value);
}
}
}