generalformatter.cs

来自「没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没」· CS 代码 · 共 169 行

CS
169
字号
/* * GeneralFormatter.cs - Implementation of the *          "System.Private.NumberFormat.GeneralFormatter" class. * * Copyright (C) 2001  Southern Storm Software, Pty Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */namespace System.Private.NumberFormat{using System;using System.Text;////  General Formatter //internal class GeneralFormatter : Formatter{	char Ee;	public GeneralFormatter(int precision, char Gg)	{		this.precision = precision;		switch(Gg)		{			case 'G':				Ee = 'E';				break;			case 'g':				Ee = 'e';				break;			default:				throw new FormatException(_("Format_StringException"));		}	}	private static int PrecisionOf(Object o) 	{		if (o is Int16 || o is UInt16) return 5;		if (o is Int32 || o is UInt32) return 10;		if (o is Int64 || o is UInt64) return 19;		if (o is Byte || o is SByte) return 3;#if CONFIG_EXTENDED_NUMERICS		if (o is Single) return 7;		if (o is Double) return 15;		if (o is Decimal) return 29;#endif		throw new FormatException(_("Format_TypeException"));	}	private string StripTrail(string s, IFormatProvider provider)	{		StringBuilder sb = new StringBuilder(s);		String ds = NumberFormatInfo(provider).NumberDecimalSeparator;		// Strip unnecessary trailing zeroes and point		if (sb.ToString().IndexOf(ds) >= 0)		{			while (sb[sb.Length - 1] == '0') sb.Remove(sb.Length-1,1);			if (sb.ToString().IndexOf(ds) == sb.Length - ds.Length)			{				sb.Remove(sb.Length-ds.Length, ds.Length);			}		}		return sb.ToString();	}	public override string Format(Object o, IFormatProvider provider)	{		int precision, exponent;		if (this.precision == -1)		{			precision = PrecisionOf(o);		}		else		{			precision = this.precision;		}#if CONFIG_EXTENDED_NUMERICS		if (OToDouble(o) == 0.0d) 		{			exponent = 0;		}		else		{			exponent = (int) Math.Floor(Math.Log10(Math.Abs(OToDouble(o))));		}#else		// Determine the exponent without using floating-point.		if (IsSignedInt(o))		{			long lvalue = OToLong(o);			if (lvalue < 0)			{				lvalue = -lvalue;			}			exponent = 0;			while(lvalue >= 10)			{				++exponent;				lvalue /= 10;			}		}		else if (IsUnsignedInt(o))		{			ulong ulvalue = OToUlong(o);			exponent = 0;			while(ulvalue >= 10)			{				++exponent;				ulvalue /= 10;			}		}		else		{			exponent = 0;		}#endif		if (IsSignedInt(o) || IsUnsignedInt(o))		{			if (exponent < precision)			{				return StripTrail(							new FixedPointFormatter(0).Format(o, provider),							provider);			}			else			{				return 					new ScientificFormatter(-1, Ee).Format(o, provider);			}		}		if (exponent >= -4 && exponent < precision)		{			return StripTrail(					new FixedPointFormatter(precision).Format(o, provider),					provider);		}		else		{			return new ScientificFormatter(precision, Ee).Format(o, provider);		}	}		} // class GeneralFormatter} // namespace System.Private.NumberFormat

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?