如何仅显示 2 个非零小数的数字?
例子:
对于 0.00045578 我想要 0.00045 对于 1.0000533535 我想要 1.000053
我的解决方案是将数字转换为字符串。搜索“.”,然后计数零,直到找到一个非零数字,然后取两位数。
这不是一个优雅的解决方案,但我认为它会给你一致的结果。
没有内置的格式。
您可以获取数字的小数部分并计算有多少个零,直到获得两位数,然后将格式放在一起。例子:
double number = 1.0000533535;
double i = Math.Floor(number);
double f = number % 1.0;
int cnt = -2;
while (f < 10) {
f *= 10;
cnt++;
}
Console.WriteLine("{0}.{1}{2:00}", i, new String('0', cnt), f);
输出:
1.000053
注意:给定的代码仅适用于实际存在小数部分的数字,而不适用于负数。如果您需要支持这些情况,则需要为此添加检查。
试试这个函数,使用解析来查找小数位数而不是寻找零(它也适用于负数):
private static string GetTwoFractionalDigitString(double input)
{
// Parse exponential-notation string to find exponent (e.g. 1.2E-004)
double absValue = Math.Abs(input);
double fraction = (absValue - Math.Floor(absValue));
string s1 = fraction.ToString("E1");
// parse exponent peice (starting at 6th character)
int exponent = int.Parse(s1.Substring(5)) + 1;
string s = input.ToString("F" + exponent.ToString());
return s;
}
你可以使用这个技巧:
int d, whole;
double number = 0.00045578;
string format;
whole = (int)number;
d = 1;
format = "0.0";
while (Math.Floor(number * Math.Pow(10, d)) / Math.Pow(10, d) == whole)
{
d++;
format += "0";
}
format += "0";
Console.WriteLine(number.ToString(format));