C#将int转换为带小数位的货币字符串

时间:2011-07-19 03:05:44

标签: c# decimal int currency

转化。 Blah ......对我来说可能是最混乱的语言方面。

无论如何,我想将int 999转换为9.99美元。使用ToString(“C”)给我$ 999.00,这不是我想要的。

我的所有整数都会以这种方式工作,这意味着如果某物的价格是12.30,那么int值将是1230.总是两位小数。我知道这对大多数人来说都很容易,我在这里或通过Google找不到任何东西。

此外,您对转化所拥有的任何资源都将不胜感激!

3 个答案:

答案 0 :(得分:16)

如果您的源变量声明为int,那么一种可能的解决方案是除以“100m”而不是“100”。否则它将执行整数除法。 例如:

    int originalValue = 80;
    string yourValue = (originalValue / 100m).ToString("C2");

这会将yourValue设置为“$ 0.80”。如果省略“m”,则将其设置为“$ 0.00”。

注意:“m”告诉编译器将100视为小数,并且作为除法的一部分,将对originalValue进行隐式转换。

答案 1 :(得分:5)

除以100:

<击>

<击>
yourValue = (originalValue / 100).ToString("C");<br>
// C will ensure two decimal places... <br>
// you can also specificy en-US or whatever for you currency format

<击>

有关货币格式的详细信息,请参阅here

更新:

我今天一定很慢......你还必须转换为双倍,否则你将丢失小数位:

yourValue = ((double)originalValue / 100).ToString("C");

(或者,您可以使用decimal, since it is usually the preferred type for currency)。

答案 2 :(得分:0)

我为任何只需要根据某个分隔符划分零的人提供了一个函数。例如:1250000 - &gt; 1,250,000 ..

public static string IntToCurrencyString(int number, string separator)
{
    string moneyReversed = "";

    string strNumber = number.ToString();

    int processedCount = 0;

    for (int i = (strNumber.Length - 1); i >= 0; i--)
    {
        moneyReversed += strNumber[i];

        processedCount += 1;

        if ((processedCount % 3) == 0 && processedCount < strNumber.Length)
        {
            moneyReversed += separator;
        }
    }

    string money = "";

    for (int i = (moneyReversed.Length - 1); i >= 0; i--)
    {
        money += moneyReversed[i];
    }

    return money;
}

享受!