【问题标题】:How do I format a double to currency rounded to the nearest dollar?如何将双精度格式设置为四舍五入到最接近的美元的货币?
【发布时间】:2010-10-27 18:25:18
【问题描述】:

我现在有

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

这会给我

$5,213.00

但我不想要“.00”。

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

【问题讨论】:

  • numba 对变量来说是个坏名字......再多一个字符就会给你“数字”
  • Omar 是正确的,但是“数字”也是变量的废话。

标签: c# formatting rounding currency


【解决方案1】:
 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

click to see Console Out Put screen

希望对您有所帮助...

谢谢。 :)

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

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

      Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalDigits = 0;
      

      只有这样你才应该进行 Format 调用:

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

      【讨论】:

        【解决方案4】:

        这应该可以完成工作:

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

        C 后面的数字指定要包含的小数位数。

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

        【讨论】:

          【解决方案5】:
          Console.WriteLine(numba.ToString("C0"));
          

          【讨论】:

            【解决方案6】:

            首先 - 不要将货币保存在 double 中 - 改用 decimal。每次。然后使用“C0”作为格式说明符:

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

            【讨论】:

            • 不应该真正将浮点用作货币字段。以美分/便士/最低允许货币单位存储的整数是避免舍入错误的唯一方法(如果您需要超出长整数范围的数字,则使用 BigInt 库:))
            • 整数具有与小数类似的舍入问题...小数本质上是一个带有精度说明符的较大整数。大多数你可以用 int 做的事情都可以用十进制做,再加上十进制是 96 位(而不是 32 或 64 用于 int 和 long)。大多数货币适合 96 位...
            • 我将支持禁止使用双打作为货币。不精确可能会导致麻烦,如果足够糟糕,还会导致审核。
            • 可能值得指出的是,在 .NET 中双精度数的性能也比小数要好很多
            • @geedubb 虽然这是 true,但你得到错误答案的速度通常并不重要;p
            猜你喜欢
            • 1970-01-01
            • 2012-04-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-13
            • 2012-11-22
            • 1970-01-01
            相关资源
            最近更新 更多