双C#的字符串格式

时间:2016-02-11 11:05:32

标签: c# string double

我有两倍,例如1.890。 我如何格式化如下:

  • 如果是100必须是18.90
  • 如果是10000必须是0.1890
  • 如果是100000必须是0.01890
  • 如果是10必须是189.0
  • 如果是1必须是1890

我试过了:

switch (price)
        {
            case (int)scales.zero:
                format = "{0:0}";
                break;
            case (int)scales.one:
                format = "{0:0}";
                break;
            case (int)scales.two:
                format = "{0:000}";
                break;
            case (int)scales.three:
                format = "{0:0000}";
                break;
            case (int)scales.four:
                format = "{0:00000}";
                break;
            case (int)scales.five:
                format = "{0:00000}";
                break;
            default:
                format = "{0:0.00}";
                break;
        }

        if (!string.IsNullOrWhiteSpace(format))
            res = string.Format(format, value);
        return res;

2 个答案:

答案 0 :(得分:0)

您的默认子句包含一个点:{0:0.00}。在其他情况下这样做:{0:0.00000}有5个零。并在格式化之前将数字除以100,1000等。

答案 1 :(得分:0)

首先,老实说,你的结果有点奇怪。例如;除1情况外,所有结果都有小数点分隔符,但对于1情况,它没有任何千位分隔符。解决这个问题是 okey ,但我觉得很奇怪。

其次,我认为你的双倍是1890而不是1.890,因为当你使用你的枚举值时,看起来他们会将你的双值除以带有幂10的值。

如果是这样,让我们​​先定义你的枚举值。

enum scales
{
    zero = 1,
    one = 10,
    two = 100,
    three = 1000,
    four = 10000,
    five = 100000
}

第二,创建一种文化,其中.为小数点分隔符,空字符串为千位分隔符。为此,我们Clone一个InvariantCulture并将其NumberGroupSeparator设置为空字符串。

var culture = (CultureInfo)CultureInfo.InvariantCulture.Clone();
culture.NumberFormat.NumberGroupSeparator = string.Empty;

然后,我们可以使用"N" format specifier正确的精度来格式化我们的结果,之后我们将double值除以匹配的枚举值。

double d = 1890;
int price = 1;
string result = "";
switch (price)
{
    case (int)scales.zero:
         d = d / (int)scales.zero;
         result = d.ToString(culture);
         break;
    case (int)scales.one:
         d = d / (int)scales.one;
         result = d.ToString("N1", culture);
         break;
    case (int)scales.two:
         d = d / (int)scales.two;
         result = d.ToString("N2", culture);
         break;
    case (int)scales.three:
         d = d / (int)scales.three;
         result = d.ToString("N3", culture);
         break;
    case (int)scales.four:
         d = d / (int)scales.four;
         result = d.ToString("N4", culture);
         break;
    case (int)scales.five:
         d = d / (int)scales.five;
         result = d.ToString("N5", culture);
         break;
    default:
         break;
}

Console.WriteLine(result); 

您可以将price的值更改为10100100010000100000,这将完全生成你想要什么结果。