为什么 bigint 数字不与 c# CultureInfo 分开?

Why bigint number not split with c# CultureInfo?

我是 C# 初学者,我在 SQL 服务器中有一个货币字段,该字段的数据类型是 bigint

例如我有这个号码:

12598546


我想以这种格式显示它:

12,598,546


我的 C# 代码:

query_statusOfRPTOST[i].price_year.ToString("N0", CultureInfo.CreateSpecificCulture("es-US"))


该代码在我的本地 PC 中工作正常,但是当应用程序在服务器中运行时,数字以以下格式显示:

12598,546


发生了什么?我该如何解决这个问题?

您可以这样使用 string.Format:

string.Format("{0:#,###0}", query_statusOfRPTOST[i].price_year)

如果您查看此 CultureInfoNumberFormat,您将看到下一个:

var culture = CultureInfo.GetCultureInfo("es-US");
Console.WriteLine(string.Join(",",culture.NumberFormat.NumberGroupSizes));
//output: 3,0

什么意思,根据msdn小数分隔符左边第一组是3位,其他不分组

如果你想获得以分组格式呈现的所需值,你应该执行以下操作之一:

  1. 创建特定文化,基于 es-US 并将 NumberGroupSizes 设置为 [3]
  2. 使用另一个现有的 CultureInfo 和预定义的 NumberGroupSizes[3] - 例如,en-US.
  3. 按照 Ali 的建议使用特殊格式

第一个代码示例:

long a = 12598546;
var culture = CultureInfo.CreateSpecificCulture("es-US");
culture.NumberFormat.NumberGroupSizes = new int[] { 3 };
Console.WriteLine(a.ToString("N0", culture));
// output 12,598,546

第二个代码示例:

long a = 12598546;
Console.WriteLine(a.ToString("N0", CultureInfo.GetCultureInfo("en-US")));
// output 12,598,546