using System; using System.Collections.Generic; using System.Linq; namespace IStation.WinFrmUI.Curve { /// /// 数字辅助类 /// public class MathHelper { #region 16进制字符 /// /// 16进制字符转十进制:如A1就是10*16+1 /// public static int GetDecimalByHexString(string strHexStr) { if (strHexStr.Count() != 2) return 0; return GetDecimalByHexChar(strHexStr[0]) * 16 + GetDecimalByHexChar(strHexStr[1]); } /// /// 获取16进制字符 /// 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 Regulate(List inPoints, int flag) { if (inPoints == null) return null; List outPoints = new List(); for (int i = 0; i < inPoints.Count(); i++) { outPoints.Add(new Model.CurvePoint(Regulate(inPoints[i].X, flag), Regulate(inPoints[i].Y, flag))); } return outPoints; } public static List Regulate(List inPoints, int flagX, int flagY) { if (inPoints == null) return null; List outPoints = new List(); for (int i = 0; i < inPoints.Count(); i++) { outPoints.Add(new Model.CurvePoint(Regulate(inPoints[i].X, flagX), Regulate(inPoints[i].Y, flagY))); } return outPoints; } //四舍五入圆整,如 0.44 -> 0.4 , 0.46 -> 0.5//flag--小数点后位数 public static void Regulate(ViewModel.RatedParas paras, int flag) { if (paras == null) return; paras.Q = Regulate(paras.Q, flag); paras.H = Regulate(paras.H, flag); paras.E = Regulate(paras.E, flag); paras.P = Regulate(paras.P, flag); paras.NPSHr = Regulate(paras.NPSHr, flag); return; } #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 小数点长度 /// /// 获取小数点长度 /// public static int GetDecimalPlacesLength(double value) { string text = value.ToString(); int num = text.IndexOf('.'); if (num >= 0) { return text.Length - num - 1; } return 0; } /// /// 获取小数点长度 /// public static double GetByPlacesLength(double value, int length) { int decimalPlacesLength = GetDecimalPlacesLength(value); if (decimalPlacesLength > length) { return Math.Round(value, length); } return value; } #endregion } }