Formatting numbers with significant figures in C#

后端 未结 8 1457
小鲜肉
小鲜肉 2020-11-28 13:01

I have some decimal data that I am pushing into a SharePoint list where it is to be viewed. I\'d like to restrict the number of significant figures displayed in the result

8条回答
  •  一个人的身影
    2020-11-28 13:55

    As I remember it "significant figures" means the number of digits after the dot separator so 3 significant digits for 0.012345 would be 0.012 and not 0.0123, but that really doesnt matter for the solution. I also understand that you want to "nullify" the last digits to a certain degree if the number is > 1. You write that 12345 would become 12300 but im not sure whether you want 123456 to become 1230000 or 123400 ? My solution does the last. Instead of calculating the factor you could ofcourse make a small initialized array if you only have a couple of variations.

    private static string FormatToSignificantFigures(decimal number, int amount)
    {
        if (number > 1)
        {
            int factor = Factor(amount);
            return ((int)(number/factor)*factor).ToString();
        }
    
        NumberFormatInfo nfi = new CultureInfo("en-US", false).NumberFormat;
        nfi.NumberDecimalDigits = amount;
    
        return(number.ToString("F", nfi));
    }
    
    private static int Factor(int x)
    {
        return DoCalcFactor(10, x-1);
    }
    
    private static int DoCalcFactor(int x, int y)
    {
        if (y == 1) return x;
        return 10*DoCalcFactor(x, y - 1);
    }
    

    Kind regards Carsten

提交回复
热议问题