如何格式化具有固定有效位数的双精度数,无论小数位数如何?

时间:2014-10-07 12:14:38

标签: c# .net

也许我的措辞不清楚所以我试图通过例子解释:

  • 如果我有像123.4567这样的双重格式,我想将其格式化为123
  • 如果我有像12.34567这样的双重格式,我想将其格式化为12.3
  • 如果我有像1.234567这样的双重格式,我想将其格式化为1.23

当然我可以使用switch / case语句执行此操作,但我想知道是否有内置或实用程序格式化,可以开箱即用。

提前致谢

3 个答案:

答案 0 :(得分:4)

使用 G3 格式指定程序:

  String result1 = 123.4567.ToString("G3");
  String result2 = 1.234567.ToString("G3");

或通过String.Format

  String result = String.Format("{0:G3}", 12.3456789);

答案 1 :(得分:0)

这是一个可以用于C#的java代码,我猜...

   public static double round(double value) {
       int places = 0;
       BigDecimal bd = new BigDecimal(value);
       if(value>=100){
           places=0;
       }else if(value<=100 && value>=10){
           places = 1;
       }else{
           places = 2;
       }
        bd = bd.setScale(places,RoundingMode.UP);
      return bd.doubleValue();
    }

答案 2 :(得分:0)

我不知道是否有更简单的东西,但这应该做你需要的:

public static string TakeNumDigits(decimal number, int digits, NumberFormatInfo formatProvider = null)
{
    formatProvider = formatProvider ?? NumberFormatInfo.CurrentInfo;
    string num = number.ToString(formatProvider);
    if (digits >= num.Length)
        return num;

    string decSep = formatProvider.NumberDecimalSeparator;
    int decSepIndex = num.IndexOf(decSep);

    if (decSepIndex == -1 || decSepIndex + digits > num.Length)
        return num.Substring(0, digits);
    else
        return num.Substring(0, digits + decSep.Length);
}

您的样品:

decimal num1 = 123.4567m;
string result = TakeNumDigits(num1, 3); // 123
decimal num2 = 12.34567m;
result = TakeNumDigits(num2, 3);        // 12.3
decimal num3 = 1.234567m;
result = TakeNumDigits(num3, 3);        // 1.23