C# 如何将双精度货币格式化为四舍五入到最接近的美元?

C# 如何将双精度货币格式化为四舍五入到最接近的美元?,c#,formatting,rounding,currency,C#,Formatting,Rounding,Currency,现在我有 double numba = 5212.6312 String.Format("{0:C}", Convert.ToInt32(numba) ) 这会给我 $5,213.00 但我不想要“.00” 我知道每次我都可以删除字符串的最后三个字符来达到效果,但似乎应该有一个更简单的方法。首先-不要将货币保持在双精度中-使用十进制。每一次。然后使用“C0”作为格式说明符: decimal numba = 5212.6312M; string s = numba.ToString("C0")

现在我有

double numba = 5212.6312
String.Format("{0:C}", Convert.ToInt32(numba) )
这会给我

$5,213.00
但我不想要“.00”


我知道每次我都可以删除字符串的最后三个字符来达到效果,但似乎应该有一个更简单的方法。

首先-不要将货币保持在
双精度中
-使用
十进制
。每一次。然后使用“C0”作为格式说明符:

decimal numba = 5212.6312M;
string s = numba.ToString("C0");

这应该可以做到:

String.Format("{0:C0}", Convert.ToInt32(numba))
C
后面的数字指定要包含的小数位数


但是,我怀疑您确实想使用该类型来存储此类数字。

我认为实现您的目标的正确方法是:

Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalDigits = 0;
只有这样,您才应该执行格式调用:

String.Format("{0:C0}", numba) 

简单:
numba.ToString(“C2”)

更多@

希望这能帮助你


谢谢。:)

不应将浮点真正用作货币字段。以美分/便士/允许的最低货币单位存储的整数是避免舍入错误的唯一方法(如果需要超出长整数范围的数字,则使用BigInt库:)。整数与十进制具有类似的舍入问题。。。decimal本质上是一个带有精度说明符的大整数。使用int可以做的大多数事情都可以使用decimal,加上decimal是96位(而对于int和long则是32或64位)。大多数货币都是96位的……我支持禁止使用双精度的货币。不精确可能会导致麻烦,如果不够糟糕的话,还会导致审计。也许值得指出的是,双数的表现也比小数好得多。NET@geedubb虽然这是真的,但你得到错误答案的速度通常并不重要;pnumba是变量的坏名称。。。再多一个字符就可以给你一个“数字”Omar是正确的,但是“数字”也是变量的垃圾名称。
String.Format("{0:C0}", numba) 
 decimal value = 0.00M;
        value = Convert.ToDecimal(12345.12345);
        Console.WriteLine(".ToString(\"C\") Formates With Currency $ Sign");
        Console.WriteLine(value.ToString("C"));
        //OutPut : $12345.12
        Console.WriteLine(value.ToString("C1"));
        //OutPut : $12345.1
        Console.WriteLine(value.ToString("C2"));
        //OutPut : $12345.12
        Console.WriteLine(value.ToString("C3"));
        //OutPut : $12345.123
        Console.WriteLine(value.ToString("C4"));
        //OutPut : $12345.1235
        Console.WriteLine(value.ToString("C5"));
        //OutPut : $12345.12345
        Console.WriteLine(value.ToString("C6"));
        //OutPut : $12345.123450