如何格式化具有固定有效位数的双精度,而不考虑小数位数
本文关键字:双精度 不考虑 小数 有效位 格式化 | 更新日期: 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