⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rational.cs

📁 本系统是在asp版《在线文件管理器》的基础上设计制作
💻 CS
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
//     Copyright (c) Telligent Systems Corporation.  All rights reserved.
// </copyright> 
//------------------------------------------------------------------------------

using System;

namespace CommunityServer.Galleries.Components
{
	/// <summary>
	/// Summary description for Rational.
	/// </summary>
	public class Rational
	{

		#region Private Members

		private int numerator;
		private int denominator;

		#endregion

		#region Constructors

		public Rational() { }

		public Rational(int numerator, int denominator)
		{
			this.numerator = numerator;
			this.denominator = denominator;
		}

		public Rational(string value)
		{
			numerator = int.Parse(value.Substring(0, value.IndexOf("/")));
			denominator = int.Parse(value.Substring(value.IndexOf("/")+1));
		}

		#endregion

		#region Public Properties

		public int Numerator
		{
			get { return numerator; }
			set { numerator = value; }
		}

		public int Denominator
		{
			get { return denominator; }
			set { denominator = value; }
		}

		public Rational Reciprocal
		{
			get { return new Rational(denominator, numerator); }
		}

		public bool IsInteger
		{
			get
			{
				return (denominator == 1
					|| (denominator != 0 && (numerator % denominator == 0))
					|| (denominator == 0 && numerator == 0));
			}
		}

		#endregion

		#region Public Methods

		public double ToDouble()
		{
			return (double)numerator / (double)denominator;
		}

		public float ToFloat()
		{
			return (float)numerator / (float)denominator;
		}

		public byte ToByte()
		{
			return (byte)ToDouble();
		}

		public int ToInt()
		{
			return numerator / denominator;
		}

		public long ToLong()
		{
			return (long)ToInt();
		}

		public override string ToString()
		{
			return ToString(PropertyFormat.Fraction);
		}

		public string ToString(PropertyFormat format)
		{
			if(format == PropertyFormat.Decimal)
			{
				return ToDouble().ToString("0.0#");
			}
			else
			{
				if(denominator == 0)
					return numerator.ToString();

				Simplify(ref numerator, ref denominator);

				if(numerator == 0)
					return "0";
				else if(denominator == 1)
					return numerator.ToString();
				else
					return numerator + "/" + denominator;
			}
		}

		public string ToDatabase()
		{
			return numerator + "/" + denominator;
		}

		#endregion

		#region Private Static Methods

		private static void Simplify(ref int numerator, ref int denominator)
		{
			if (numerator != 0)
			{
				Int32 common = GCD(Math.Abs(numerator), denominator);

				numerator = numerator / common;
				denominator = denominator / common;
			}
		}

		private static int GCD(int num1, int num2) 
		{
			while (num1 != num2)
			{
				if (num1 > num2) num1 = num1 - num2;
				else num2 = num2 - num1;
			}

			return num1;
		}

		public override bool Equals(object obj) 
		{
			if (obj==null) return false;
			if (obj==this) return true;
			if (obj is Rational) 
			{
				Rational that = (Rational) obj;
				return this.ToDouble() == that.ToDouble();
			}
			return false;
		}

		public override int GetHashCode()
		{
			return this.ToDouble().GetHashCode();
		}


		#endregion

	}
}

⌨️ 快捷键说明

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