5 // Miguel de Icaza (miguel@ximian.com)
7 // (C) Ximian, Inc. http://www.ximian.com
10 using System.Globalization;
11 using System.Runtime.CompilerServices;
16 public struct Single : IComparable, IFormattable, IConvertible {
17 public const float Epsilon = 1.4e-45f;
18 public const float MaxValue = 3.40282346638528859e38f;
19 public const float MinValue = -3.40282346638528859e38f;
20 public const float NaN = 0.0f / 0.0f;
21 public const float PositiveInfinity = 1.0f / 0.0f;
22 public const float NegativeInfinity = -1.0f / 0.0f;
26 public int CompareTo (object v)
31 if (!(v is System.Single))
32 throw new ArgumentException (Locale.GetText ("Value is not a System.Single"));
36 if (this.value == fv) return 0;
37 else if (this.value > fv) return 1;
41 public override bool Equals (object o)
43 if (!(o is System.Single))
46 return ((float) o) == value;
49 public override int GetHashCode ()
54 public static bool IsInfinity (float f)
56 return (f == PositiveInfinity || f == NegativeInfinity);
59 public static bool IsNaN (float f)
64 public static bool IsNegativeInfinity (float f)
66 return (f < 0.0f && (f == NegativeInfinity || f == PositiveInfinity));
69 public static bool IsPositiveInfinity (float f)
71 return (f > 0.0f && (f == NegativeInfinity || f == PositiveInfinity));
74 public static float Parse (string s)
76 double parsed_value = Double.Parse (
77 s, (NumberStyles.Float | NumberStyles.AllowThousands), null);
78 if (parsed_value > (double) float.MaxValue)
79 throw new OverflowException();
81 return (float) parsed_value;
84 public static float Parse (string s, IFormatProvider fp)
86 double parsed_value = Double.Parse (
87 s, (NumberStyles.Float | NumberStyles.AllowThousands), fp);
88 if (parsed_value > (double) float.MaxValue)
89 throw new OverflowException();
91 return (float) parsed_value;
94 public static float Parse (string s, NumberStyles style)
96 double parsed_value = Double.Parse (s, style, null);
97 if (parsed_value > (double) float.MaxValue)
98 throw new OverflowException();
100 return (float) parsed_value;
103 public static float Parse (string s, NumberStyles style, IFormatProvider fp)
105 double parsed_value = Double.Parse (s, style, fp);
106 if (parsed_value > (double) float.MaxValue)
107 throw new OverflowException();
109 return (float) parsed_value;
112 public override string ToString ()
114 return ToString (null, null);
117 public string ToString (IFormatProvider fp)
119 return ToString (null, fp);
122 public string ToString (string format)
124 return ToString (format, null);
127 public string ToString (string format, IFormatProvider fp)
129 if (fp is CultureInfo)
130 return SingleFormatter.NumberToString(format,
131 ((CultureInfo)fp).NumberFormat, value);
133 return SingleFormatter.NumberToString(format,
134 (NumberFormatInfo)fp, value);
137 // ============= IConvertible Methods ============ //
139 public TypeCode GetTypeCode ()
141 return TypeCode.Single;
144 bool IConvertible.ToBoolean (IFormatProvider provider)
146 return System.Convert.ToBoolean (value);
149 byte IConvertible.ToByte (IFormatProvider provider)
151 return System.Convert.ToByte (value);
154 char IConvertible.ToChar (IFormatProvider provider)
156 return System.Convert.ToChar (value);
159 DateTime IConvertible.ToDateTime (IFormatProvider provider)
161 return System.Convert.ToDateTime (value);
164 decimal IConvertible.ToDecimal (IFormatProvider provider)
166 return System.Convert.ToDecimal (value);
169 double IConvertible.ToDouble (IFormatProvider provider)
171 return System.Convert.ToDouble (value);
174 short IConvertible.ToInt16 (IFormatProvider provider)
176 return System.Convert.ToInt16 (value);
179 int IConvertible.ToInt32 (IFormatProvider provider)
181 return System.Convert.ToInt32 (value);
184 long IConvertible.ToInt64 (IFormatProvider provider)
186 return System.Convert.ToInt64 (value);
189 [CLSCompliant (false)]
190 sbyte IConvertible.ToSByte (IFormatProvider provider)
192 return System.Convert.ToSByte (value);
195 float IConvertible.ToSingle (IFormatProvider provider)
197 return System.Convert.ToSingle (value);
200 object IConvertible.ToType (Type conversionType, IFormatProvider provider)
202 return System.Convert.ToType (value, conversionType, provider);
205 [CLSCompliant (false)]
206 ushort IConvertible.ToUInt16 (IFormatProvider provider)
208 return System.Convert.ToUInt16 (value);
211 [CLSCompliant (false)]
212 uint IConvertible.ToUInt32 (IFormatProvider provider)
214 return System.Convert.ToUInt32 (value);
217 [CLSCompliant (false)]
218 ulong IConvertible.ToUInt64 (IFormatProvider provider)
220 return System.Convert.ToUInt64 (value);