如何只显示前2位小数不等于0

时间:2012-06-29 18:34:07

标签: c#

如何只显示2个非= 0小数的数字?

示例:

对于0.00045578我想要0.00045而对于1.0000533535我想要1.000053

4 个答案:

答案 0 :(得分:3)

我的解决方案是将数字转换为字符串。搜索“。”,然后计算零,直到找到非零数字,然后取两位数。

这不是一个优雅的解决方案,但我认为它会给你一致的结果。

答案 1 :(得分:3)

没有内置格式。

你可以得到数字的小数部分,并计算有多少个零,直到你得到两位数,然后把它的格式放在一起。例如:

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

注意:给定代码仅在实际存在数字的小数部分时才有效,而不适用于负数。如果您需要支持这些情况,则需要添加检查。

答案 2 :(得分:1)

尝试此功能,使用解析来查找小数位数而不是寻找零(它也适用于负#s):

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;
}

答案 3 :(得分:0)

您可以使用此技巧:

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));