簡體   English   中英

雙C#的字符串格式

[英]String format from double C#

我有兩倍,例如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;

您的默認子句包含一個點:{0:0.00}。 在其他情況下,請這樣做:{0:0.00000}具有5個零。 並在格式化前將數字除以100、1000等。

首先,說實話,您的結果有點奇怪。 例如; 1情況外,所有結果都帶有小數點分隔符,但對於1情況,它沒有任何千位分隔符。 解決這個問題還不錯 ,但對我來說似乎很奇怪。

其次,我認為您的double是1890而不是1.890因為當您使用枚舉值時,看起來它們將double型值除以它們的值與冪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;

然后,在將double值除以數學枚舉值之后,可以使用該區域性使用"N"格式說明符適當的精度來格式化結果。

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這將是產生結果,你想要什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM