使用String.Format时值不正确

时间:2011-09-29 16:22:08

标签: c# .net string

我需要将十进制值转换为类似

的值
  

0.3 = USDC000000000030

我写的代码如下。

   transactionAmount = String.Format("USDC{0}", ((int)(amount*100)).ToString("D12"));

然而,它正好适用于某些值,就像上面给出的例子一样。对于其他一些值,转换是错误的,例如

  

0.9 = USDC000000000089

     

1 = USDC000000000099

     

1.1 USDC000000000109

知道为什么会这样发生吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

您可能正在使用double,这对于财务价值来说是一个巨大的错误。

请改用decimal,然后清除烦恼。

即便:

decimal amount = 0.3m;
string s = String.Format("USDC{0:000000000000}", 100 * amount);
Console.WriteLine(s);

输出:

USDC000000000030

请注意语言规范说明:

  

十进制类型是128位数据类型,适用于财务和货币计算。

答案 1 :(得分:0)

请改为尝试:

String.Format("USDC{0:D12}", (int)(Convert.ToDecimal(amount) * 100));

测试以下内容:

  • 0.90 = USDC000000000090
  • 1.00 = USDC000000000100
  • 0.89 = USDC000000000089
  • 0.84 = USDC000000000084
  • 1.10 = USDC000000000110