namespace IStation.Curve
|
{
|
/// <summary>
|
/// 辅助类
|
/// </summary>
|
public static class UtilsHelper
|
{
|
/// <summary>
|
/// 求两个数值的最小值
|
/// </summary>
|
public static double Min(this double first, double second)
|
{
|
return first > second ? second : first;
|
}
|
|
/// <summary>
|
/// 求两个数值的最大值
|
/// </summary>
|
public static double Max(this double first, double second)
|
{
|
return first > second ? first : second;
|
}
|
|
/// <summary>
|
/// 是否为中间数
|
/// </summary>
|
public static bool IsMiddle(this double x, double x1, double x2)
|
{
|
return (x >= x1 && x <= x2) || (x <= x1 && x >= x2);
|
}
|
|
#region 16进制字符
|
/// <summary>
|
/// 16进制字符转十进制:如A1就是10*16+1
|
/// </summary>
|
public static int GetDecimalByHexString(string strHexStr)
|
{
|
if (strHexStr.Count() != 2)
|
return 0;
|
return GetDecimalByHexChar(strHexStr[0]) * 16 + GetDecimalByHexChar(strHexStr[1]);
|
}
|
|
/// <summary>
|
/// 获取16进制字符
|
/// </summary>
|
public static short GetDecimalByHexChar(char strHexStr)
|
{
|
switch (strHexStr)
|
{
|
case '0':
|
return 0;
|
case '1':
|
return 1;
|
case '2':
|
return 2;
|
case '3':
|
return 3;
|
case '4':
|
return 4;
|
case '5':
|
return 5;
|
case '6':
|
return 6;
|
case '7':
|
return 7;
|
case '8':
|
return 8;
|
case '9':
|
return 9;
|
case 'a':
|
case 'A':
|
return 10;
|
case 'b':
|
case 'B':
|
return 11;
|
case 'c':
|
case 'C':
|
return 12;
|
case 'd':
|
case 'D':
|
return 13;
|
case 'e':
|
case 'E':
|
return 14;
|
case 'f':
|
case 'F':
|
return 15;
|
|
default:
|
return 0;
|
}
|
}
|
|
#endregion
|
|
#region 四舍五入圆整
|
//四舍五入圆整,如 0.44 -> 0.4 , 0.46 -> 0.5//flag--小数点后位数
|
public static double Regulate(double v, int flag)
|
{
|
bool isNegative = false;
|
//如果是负数
|
if (v < 0)
|
{
|
isNegative = true;
|
v = Math.Abs(v);
|
}
|
else
|
{
|
isNegative = false;
|
}
|
|
double value = Math.Round(v, flag);
|
if (isNegative)
|
{
|
value = -value;
|
}
|
return value;
|
}
|
|
//四舍五入圆整,如 0.44 -> 0.4 , 0.46 -> 0.5//flag--小数点后位数
|
public static List<IStation.Curve.CurvePoint> Regulate(List<IStation.Curve.CurvePoint> inPoints, int flag)
|
{
|
if (inPoints == null)
|
return null;
|
List<IStation.Curve.CurvePoint> outPoints = new List<IStation.Curve.CurvePoint>();
|
for (int i = 0; i < inPoints.Count(); i++)
|
{
|
outPoints.Add(new IStation.Curve.CurvePoint(Regulate(inPoints[i].X, flag), Regulate(inPoints[i].Y, flag)));
|
}
|
return outPoints;
|
}
|
|
public static List<IStation.Curve.CurvePoint> Regulate(List<IStation.Curve.CurvePoint> inPoints, int flagX, int flagY)
|
{
|
if (inPoints == null)
|
return null;
|
List<IStation.Curve.CurvePoint> outPoints = new List<IStation.Curve.CurvePoint>();
|
for (int i = 0; i < inPoints.Count(); i++)
|
{
|
outPoints.Add(new IStation.Curve.CurvePoint(Regulate(inPoints[i].X, flagX), Regulate(inPoints[i].Y, flagY)));
|
}
|
return outPoints;
|
}
|
#endregion
|
|
#region 向上圆整
|
|
public static double RegulateUp(double m, int flag)
|
{
|
double k = 1;
|
for (int i = 0; i < flag; i++)
|
{
|
k = k * 10;
|
}
|
return System.Math.Ceiling(m * k) / k;
|
}
|
|
public static int RoundUp2(double v)
|
{
|
int k = (int)(v / 2) * 2 + 2;
|
return k;
|
}
|
public static int RoundUp5(double v)
|
{
|
int k = (int)(v / 5) * 5 + 5;
|
return k;
|
}
|
public static int RoundUp10(double v)
|
{
|
int k = (int)(v / 10) * 10 + 10;
|
return k;
|
}
|
#endregion
|
|
#region 向下圆整
|
|
public static double RegulateDown(double m, int flag)
|
{
|
double k = 1;
|
for (int i = 0; i < flag; i++)
|
{
|
k = k * 10;
|
}
|
return System.Math.Floor(m * k) / k;
|
}
|
public static int RoundDown2(double v)
|
{
|
int k = (int)(v / 2) * 2;
|
return k;
|
}
|
public static int RoundDown5(double v)
|
{
|
int k = (int)(v / 5) * 5;
|
return k;
|
}
|
public static int RoundDown10(double v)
|
{
|
int k = (int)(v / 10) * 10;
|
return k;
|
}
|
|
#endregion
|
|
#region 小数点长度
|
/// <summary>
|
/// 获取小数点长度
|
/// </summary>
|
public static int GetDecimalPlacesLength(double value)
|
{
|
string text = value.ToString();
|
int num = text.IndexOf('.');
|
if (num >= 0)
|
{
|
return text.Length - num - 1;
|
}
|
return 0;
|
}
|
|
|
/// <summary>
|
/// 获取小数点长度
|
/// </summary>
|
public static double GetByPlacesLength(double value, int length)
|
{
|
int decimalPlacesLength = GetDecimalPlacesLength(value);
|
if (decimalPlacesLength > length)
|
{
|
return Math.Round(value, length);
|
}
|
return value;
|
}
|
#endregion
|
|
}
|
}
|