How to round a integer to the close hundred?

前端 未结 9 1206
生来不讨喜
生来不讨喜 2020-11-29 08:57

I don\'t know it my nomenclature is correct! Anyway, these are the integer I have, for example :

76
121
9660

And I\'d like to round them to

9条回答
  •  野性不改
    2020-11-29 09:45

    I had a similar project internally where the business requirements were to search within the 100's range of a given number and find duplicate DB records. So if the user was using line 856 I would search 800 - 899. If the user was using 8567 I would search 8500 - 8599. Not an exact rounding by 100's, but thought I would include my unique approach as some of these basic coding questions are embedded within a larger business project. To test this I seeded a decimal list from 1 - 99999 and spit the results out into a file.

        /// 
        /// This method accepts an inbound Line Number and returns the line range
        /// in the form of lowest to highest based on 100's
        /// Example would be 9122 returns 9100 - 9199
        /// It's used for generating some additional BOM Temp functionality.
        /// 
        /// 
        /// 
        public static ProjectLineRange CalculateLineRange(decimal inboundNumber)
        {
            var lineRange = new ProjectLineRange();
            var numberLength = inboundNumber.ToString(CultureInfo.InvariantCulture).Length;
    
            switch (numberLength)
            {
                case 0: //NULL?
                    break;
                case 1: //Represents 1 - 9
                    lineRange.LineBottom = 1;
                    lineRange.LineTop = 99;
                    break;
                case 2: //Represents 10 - 99
                    lineRange.LineBottom = 1;
                    lineRange.LineTop = 99;
                    break;
                case 3: //Represents 100 - 999
                    lineRange = CalculateHundredsRange((int)(inboundNumber / 100));
                    break;
                case 4: //Represents 1000 - 9999
                    lineRange = CalculateThousandsRange(
                        Convert.ToInt32(inboundNumber.ToString(CultureInfo.InvariantCulture).Substring(1, 1)),
                        Convert.ToInt32(inboundNumber.ToString(CultureInfo.InvariantCulture).Substring(0, 1)));
                    break;
                case 5: //Represents 10000 - 99999
                    lineRange = CalculateTenThousandsRange(
                        Convert.ToInt32(inboundNumber.ToString(CultureInfo.InvariantCulture).Substring(2, 1)),
                        Convert.ToInt32(inboundNumber.ToString(CultureInfo.InvariantCulture).Substring(1, 1)),
                        Convert.ToInt32(inboundNumber.ToString(CultureInfo.InvariantCulture).Substring(0, 1)));
                    break;
            }
    
            return lineRange;
        }
    
    public class ProjectLineRange
        {
           public decimal LineBottom { get; set; }
           public decimal LineTop { get; set; }
        }
    
        /// 
        /// Helper method to return the range for the 100's place
        /// 
        /// 
        /// 
        public static ProjectLineRange CalculateHundredsRange(int hundredsPlaceValue)
        {
            var tempLineRange = new ProjectLineRange();
            tempLineRange.LineBottom = hundredsPlaceValue * 100;
            tempLineRange.LineTop = tempLineRange.LineBottom + 99;
    
            return tempLineRange;
        }
    
        /// 
        /// Helper method to return the range for the 100's place when factoring a 1000's number
        /// 
        /// 
        /// 
        /// 
        public static ProjectLineRange CalculateThousandsRange(int hundredsPlaceValue, int thousandsPlaceValue)
        {
            var tempLineRange = new ProjectLineRange();
            var tempThousands = thousandsPlaceValue * 1000;
            var hundredsRange = CalculateHundredsRange(hundredsPlaceValue);
            tempLineRange.LineBottom = tempThousands + hundredsRange.LineBottom;
            tempLineRange.LineTop = tempThousands + hundredsRange.LineTop;
    
            return tempLineRange;
        }
    
        /// 
        /// Helper method to return the range for the 100's place when factoring a 10000's number
        /// 
        /// 
        /// 
        /// 
        /// 
        public static ProjectLineRange CalculateTenThousandsRange(int hundredsPlaceValue, int thousandsPlaceValue, int tenThousandsPlaceValue)
        {
            var tempLineRange = new ProjectLineRange();
            var tempThousands = thousandsPlaceValue * 1000;
            var tempTenThousands = tenThousandsPlaceValue * 10000;
            var hundredsRange = CalculateHundredsRange(hundredsPlaceValue);
            tempLineRange.LineBottom = tempTenThousands + tempThousands + hundredsRange.LineBottom;
            tempLineRange.LineTop = tempTenThousands + tempThousands + hundredsRange.LineTop;
    
            return tempLineRange;
        }
    

提交回复
热议问题