使用String.Format时,值不正确

本文关键字:不正确 String Format 使用 | 更新日期: 2023-09-27 18:10:15

我需要将一个十进制值转换成像

这样的值

0.3 = USDC000000000030

我写的代码如下:

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

但是,对于上面给出的示例中的某些值,它可以完美地工作。对于其他一些值,它是转换错误的,例如

0.9 = USDC000000000089

1 = USDC000000000099

1.1 USDC000000000109

知道为什么会这样吗?

Thanks in advance

使用String.Format时,值不正确

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

decimal代替,洗去你的烦恼。

即:

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

USDC000000000030

注意语言规范声明:

十进制类型为128位数据类型,适合于金融和货币计算。

试试这个:

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