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

本文关键字:货币 字符串 小数 int 转换 | 更新日期: 2023-09-27 18:02:41

转换。布拉。。。对我来说,这可能是语言中最令人困惑的方面。

无论如何,我想把int 999转换成9.99美元。使用ToString("C"(会给我999.00美元,这不是我想要的。

我所有的整数都是这样工作的,这意味着如果某个东西的价格是12.30,那么int值将是1230。总是小数点后两位。我知道这对大多数人来说很容易,我在这里或通过谷歌都找不到任何东西。

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

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

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

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

这会将您的Value设置为"$0.80"。如果您省略"m",它会将其设置为"$0.00"。

注意:"m"告诉编译器将100视为十进制,并且作为除法的一部分,originalValue将发生隐式强制转换。

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

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

更新:

我今天一定很慢。。。你还必须转换成双精度,否则你会失去小数点:

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

(或者,您可以使用十进制,因为它通常是首选的货币类型(。

我为那些只需要根据特定分隔符来划分零的人提供了一个函数。例如:1250000->1250000..

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

享受吧!