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

5

转换。哎呀...这可能是我最困惑的语言方面。

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

我的所有整数都将以这种方式工作,这意味着如果某物品的价格为12.30,则int值将为1230。两位小数,始终如一。我知道这对大多数人来说很容易,但我在这里或通过谷歌找不到任何东西。

另外,如果有任何关于转换的资源,将不胜感激!


尝试 (YOURINTVALUE / 100).ToString("C2"); - fardjad
1
你能否切换使用 Decimal 类型? - drharris
@fardjad:不完全正确;你会执行整数除法,你需要使用 someInt / 100.0 - Ed S.
@Ed S. 是的,你说得对。至少有一个操作数应该被(强制)转换为浮点数。 - fardjad
3个回答

19

如果您的源变量已声明为int类型,则一种可能的解决方案是除以"100m"而不是"100"。否则,这将执行整数除法。 例如:

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

这将把你的值设置为"$0.80"。如果省略 "m",它将把它设置为 "$0.00"。

注意: "m" 告诉编译器将100处理为十进制数,并且在除法运算中将原始值隐式转换为 decimal 类型。


6

只需除以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

有关货币格式的详细信息,请参见此处

更新:

我今天可能反应有点慢...你还需要将其转换为double,否则你会丢失小数位:

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

另外,您也可以使用十进制(decimal)类型,因为它通常是货币首选类型


0
我有一个函数,适用于任何需要根据特定分隔符分割零的人。例如:1250000 -> 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;
}

享受吧!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接