📄 rational.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 + -