Money.cs
using System; using System.Globalization; namespace ConsoleApplication1 { public struct Money { public static int MidPointWayFromZero = 2; private decimal value; private Money(decimal value) { this.value = Decimal.Round(value, MidPointWayFromZero, MidpointRounding.AwayFromZero); } public static implicit operator Money(decimal value) => new Money(value); public static implicit operator Money(byte value) => new Money(value); public static implicit operator Money(sbyte value) => new Money(value); public static implicit operator Money(short value) => new Money(value); public static implicit operator Money(ushort value) => new Money(value); public static implicit operator Money(char value) => new Money(value); public static implicit operator Money(int value) => new Money(value); public static implicit operator Money(uint value) => new Money(value); public static implicit operator Money(long value) => new Money(value); public static implicit operator Money(ulong value) => new Money(value); public static implicit operator Money(float value) => new Money(Convert.ToDecimal(value)); public static implicit operator Money(double value) => new Money(Convert.ToDecimal(value)); public static explicit operator decimal(Money money) => money.value; public static explicit operator byte(Money money) => Convert.ToByte(money.value); public static explicit operator sbyte(Money money) => Convert.ToSByte(money.value); public static explicit operator char(Money money) => Convert.ToChar(money.value); public static explicit operator short(Money money) => Convert.ToInt16(money.value); public static explicit operator ushort(Money money) => Convert.ToUInt16(money.value); public static explicit operator int(Money money) => Convert.ToInt32(money.value); public static explicit operator uint(Money money) => Convert.ToUInt32(money.value); public static explicit operator long(Money money) => Convert.ToInt64(money.value); public static explicit operator ulong(Money money) => Convert.ToUInt64(money.value); public static explicit operator float(Money money) => Convert.ToSingle(money.value); public static explicit operator double(Money money) => Convert.ToDouble(money.value); public override String ToString() => value.ToString(); public String ToString(String format) => value.ToString(format); public String ToString(IFormatProvider provider) => value.ToString(provider); public String ToString(String format, IFormatProvider provider) => value.ToString(format, provider); public static Money Parse(String s) => new Money(Decimal.Parse(s)); public static Money Parse(String s, NumberStyles style) => new Money(Decimal.Parse(s, style)); public static Money Parse(String s, IFormatProvider provider) => new Money(Decimal.Parse(s, provider)); public static Money Parse(String s, NumberStyles style, IFormatProvider provider) => new Money(Decimal.Parse(s, style, provider)); public static Boolean TryParse(String s, out Money result) => Decimal.TryParse(s, out result.value); public static Boolean TryParse(String s, NumberStyles style, IFormatProvider provider, out Decimal result) => Decimal.TryParse(s, style, provider, out result); public static Money Round(Money d, int decimals = 0) => new Money(Decimal.Round(d.value, decimals)); public static Money Round(Money d, MidpointRounding mode) => new Money(Decimal.Round(d.value, 0, mode)); public static Money Round(Money d, int decimals, MidpointRounding mode) => new Money(Decimal.Round(d.value, decimals, mode)); public static short ToInt16(Money value) => Convert.ToInt16(value.value); public static int ToInt32(Money d) => Convert.ToInt32(d.value); public static long ToInt64(Money d) => Convert.ToInt64(d.value); public static Money operator +(Money d) => d; public static Money operator -(Money d) => -d; public static Money operator ++(Money d) => new Money(d.value + 1); public static Money operator --(Money d) => new Money(d.value - 1); public static Money operator +(Money d1, Money d2) => new Money(d1.value + d2.value); public static Money operator -(Money d1, Money d2) => new Money(d1.value - d2.value); public static Money operator *(Money d1, Money d2) => new Money(d1.value * d2.value); public static Money operator /(Money d1, Money d2) => new Money(d1.value / d2.value); public static Money operator %(Money d1, Money d2) => new Money(d1.value % d2.value); public static bool operator ==(Money d1, Money d2) => d1.value == d2.value; public static bool operator !=(Money d1, Money d2) => d1.value != d2.value; public static bool operator <(Money d1, Money d2) => d1.value < d2.value; public static bool operator <=(Money d1, Money d2) => d1.value <= d2.value; public static bool operator >(Money d1, Money d2) => d1.value > d2.value; public static bool operator >=(Money d1, Money d2) => d1.value >= d2.value; public TypeCode GetTypeCode() { return TypeCode.Decimal; } } }
Consol içerisinde kullanım testi
using System; namespace ConsoleApplication1 { class Program { public static void Main(params string[] args) { Money money = 919; Console.WriteLine(IsPrime(money)); money += .23; money *= .18; Console.WriteLine(money); } private static bool IsPrime(Money number) { Money i = 2; if (number <= 2 || number % 2 == 0) return false; i++; while (i * i <= number) { if (number % i == 0) return false; i++; } return true; } } }