【问题标题】:How to format Int64 values to currency如何将 Int64 值格式化为货币
【发布时间】:2015-02-22 19:35:04
【问题描述】:

我正在开发一个应用程序,我将数据库中的货币值保存为 int64。

例如,如果我在数据库中保存 1 欧元,它会保存为 100 美分。 当我读取该值时,如何对其进行格式化以使其显示如下:

db value / output
100000 = 1,000.00
10000 = 100.00
1000 = 10.00
100 = 1.00
10 = 0.10
1 = 0.01

我尝试了 string.format,但无法获得所需的结果... 非常感谢您的帮助。

【问题讨论】:

  • 那么小数和千位分隔符是什么?千位是.,但100位是,
  • 到目前为止,您对 string.format 进行了哪些尝试,得到了什么结果?另外,为什么只有第一个例子不遵循欧洲符号?
  • 我认为 1 应该表示为 0.01 而不是 0,01 对吧?
  • @HadiHassan 这取决于您的文化的货币格式。有些使用逗号作为小数分隔符。
  • 我编辑了这些值。

标签: c# asp.net asp.net-mvc-5 bitcoin int64


【解决方案1】:

您可以创建具有所需属性的自定义NumberFormatInfo 对象,并使用它来格式化输出。下面的代码不假设值来自数据库,但应该没有区别:

// Create custom number format
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ".";
nfi.NumberGroupSeparator = ",";
// You can also set property NumberDecimalDigits to the number of decimal digits that you need:
nfi.NumberDecimalDigits = 2;

// Output the results
long textValue = 123456789;
Console.WriteLine((textValue/100m).ToString("N", nfi));

因为您是使用整数存储值,所以输出数除以 100 得到实际值

【讨论】:

  • 感谢您的回答。我明天试试。但是如果存储的值是例如 1000,我认为在显示值后使用这种方法没有 .00?
  • @mxcoin 如果输入 1000 应该显示 10.00
  • 好的,我使用了这种方法,它适用于欧元值,但如果我想格式化比特币值(点后 8 位),它不起作用。我将部门更改为100000000m。 :(
  • @mxcoin 我将答案更新为也使用属性NumberDecimalDigits。如果是比特币,请将数字 3 更新为 8
  • 我进行了实验,并在 tostring 中除以 100000000m 和 N8 取得了成功。但你的方法更干净。非常感谢。
【解决方案2】:

执行此操作的最简单方法可能是让 SQL 为您处理转换。假设你有 SQL Server,你可以简单地使用函数FORMAT(db_value/100.0,'#,##0.00')

https://msdn.microsoft.com/en-us/library/hh213505.aspx

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多