internal static double Round(double number, int rem, RoudingMode roundMode) { var unit = 1d; if (rem <= 0) { rem = MathHelper.Clamp(-rem, 0, 15); unit = Math.Pow(10, -rem - 1); } else { unit = Math.Pow(10, rem - 1); } if (roundMode == RoudingMode.Celling) { number = Math.Round((number + unit / 2) / unit, 0) * unit; } else { number = Math.Round((number - unit / 2) / unit, 0) * unit; } return(number); // if (roundMode == RoudingMode.Floor) // { // return Math.Round(number - unit / 2, rem + 1); // } // else // { // return Math.Round(number + unit / 2, rem + 1); // } //} //else //{ // if (roundMode == RoudingMode.Celling) // { // var unit = Math.Pow(10, rem - 1); // number = Math.Round((number + unit / 2) / unit, rem - 1) * unit; // //upperBound = Math.Ceiling(number); // //upperBound = upperBound + 5 - upperBound % 5; // } // else // { // var unit = Math.Pow(10, rem - 1); // number = Math.Round((number - unit / 2) / unit, rem - 1) * unit; // //upperBound = Math.Floor(number); // //upperBound = upperBound - upperBound % 5; // } // return number; //} }
internal static double Round(double number, int rem, RoudingMode roundMode) { var unit = 1d; if (rem <= 0) { rem = MathHelper.Clamp(-rem, 0, 15); unit = Math.Pow(10, -rem - 1); } else { unit = Math.Pow(10, rem - 1); } if (roundMode == RoudingMode.Celling) { number = Math.Round((number + unit / 2) / unit, 0) * unit; } else { number = Math.Round((number - unit / 2) / unit, 0) * unit; } return(number); }