如何格式化双倍货币四舍五入到最接近的美元?

spi*_*ton 60 c# formatting currency rounding

现在我有

double numba = 5212.6312
String.Format("{0:C}", Convert.ToInt32(numba) )
Run Code Online (Sandbox Code Playgroud)

这会给我

$5,213.00
Run Code Online (Sandbox Code Playgroud)

但我不想要".00".

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

Mar*_*ell 93

首先 - 不要将货币保留在double- 使用货币decimal.每次.然后使用"C0"作为格式说明符:

decimal numba = 5212.6312M;
string s = numba.ToString("C0");
Run Code Online (Sandbox Code Playgroud)

  • @geedubb虽然这是*true*,但是你得到错误答案的速度通常并不重要; p (8认同)
  • 整数具有与十进制相似的舍入问题...十进制本质上是一个具有精度说明符的较大整数.你可以使用int做的大多数事情都可以用十进制,加十进制是96位(而int和long则是32或64).大多数货币适合96位...... (4认同)
  • 可能值得指出的是,在.NET 中,doubles 的性能也比decimals 好得多 (2认同)

Nol*_*rin 24

这应该做的工作:

String.Format("{0:C0}", Convert.ToInt32(numba))
Run Code Online (Sandbox Code Playgroud)

在后面的数字C指定小数的位数.

我怀疑你真的想要使用这种decimal类型来存储这些数字.


Red*_*ter 5

Console.WriteLine(numba.ToString("C0"));
Run Code Online (Sandbox Code Playgroud)


Bha*_*tap 5

 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
Run Code Online (Sandbox Code Playgroud)

单击查看控制台输出屏幕

希望这可以帮助您...

谢谢。:)