如何格式化具有固定有效位数的双精度,而不考虑小数位数

本文关键字:双精度 不考虑 小数 有效位 格式化 | 更新日期: 2023-09-27 18:25:44

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

  • 如果我有一个像123.4567这样的替身,我想把它格式化为123
  • 如果我有12.34567这样的双人间,我想把它格式化为12.3
  • 如果我有一个像1.234567这样的双精度,我想把它格式化为1.23

当然,我可以用switch/case语句来实现这一点,但我想知道是否有任何内置或实用程序格式,什么可以开箱即用。

提前感谢

如何格式化具有固定有效位数的双精度,而不考虑小数位数

使用G3格式指定器:

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

或通过String.Format:

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

我想这是一个可以用于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();
    }

我不知道是否有更简单的东西,但这应该可以满足您的需要:

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