对十进制数使用自定义字符串格式c#

Posted

技术标签:

【中文标题】对十进制数使用自定义字符串格式c#【英文标题】:Using custom string format for decimal number c# 【发布时间】:2017-03-11 08:56:43 【问题描述】:

我在数据库中得到了一个小数点后 4 位的十进制值,但我需要显示格式,后面有没有 0 的千位分隔符。我已经尝试过 G、F、N 格式,但对我想要的结果没有任何线索。

1234.3456          // 1,234.3456
1234.0000          // 1,234.00
1234.3450          // 1,234.345
1234.345678        // 1,234,3457
1234               // 1,234.00
1234.2             // 1,234,20

【问题讨论】:

但我对我想要的结果没有任何线索 【参考方案1】:

这里很简单,就是解决这个问题的例子。如果它解决了您的问题,请不要忘记标记为答案:)

 double value;

  value = 123;
  Console.WriteLine(value.ToString("00000"));
  Console.WriteLine(String.Format("0:00000", value));
  // Displays 00123

  value = 1.2;
  Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
  Console.WriteLine(String.Format(CultureInfo.InvariantCulture, 
                    "0:0.00", value));
  // Displays 1.20

  Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
  Console.WriteLine(String.Format(CultureInfo.InvariantCulture, 
                                  "0:00.00", value));
  // Displays 01.20

  CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
  Console.WriteLine(value.ToString("00.00", daDK)); 
  Console.WriteLine(String.Format(daDK, "0:00.00", value));
  // Displays 01,20

  value = .56;
  Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
  Console.WriteLine(String.Format(CultureInfo.InvariantCulture, 
                                  "0:0.0", value));
  // Displays 0.6

  value = 1234567890;
  Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));   
  Console.WriteLine(String.Format(CultureInfo.InvariantCulture, 
                                  "0:0,0", value));   
  // Displays 1,234,567,890      

  CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
  Console.WriteLine(value.ToString("0,0", elGR));   
 Console.WriteLine(String.Format(elGR, "0:0,0", value));  
  // Displays 1.234.567.890

  value = 1234567890.123456;
  Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture)); 
  Console.WriteLine(String.Format(CultureInfo.InvariantCulture, 
                                  "0:0,0.0", value)); 
  // Displays 1,234,567,890.1  

  value = 1234.567890;
  Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));    
  Console.WriteLine(String.Format(CultureInfo.InvariantCulture, 
                                  "0:0,0.00", value));    
  // Displays 1,234.57 

【讨论】:

【参考方案2】:

实际上,Decimal.ToString 的 MSDN 页面几乎完全符合您在上一个示例中所需要的内容。

说明符 = "#,#.00#;(#,#.00#)"

所以只需删除否定格式,并在末尾添加一个额外的# 即可:specifier = "#,#.00##"

刚刚尝试过:

decimal[] decimals = 1234.3456M, 1234.0000M, 1234.3450M, 1234.345678M, 1234, 1234.2M;
string[] formattedDecimals = decimals.Select(d => d.ToString(specifier)).ToArray();

【讨论】:

以上是关于对十进制数使用自定义字符串格式c#的主要内容,如果未能解决你的问题,请参考以下文章

从C#中的字符串中提取十进制数[重复]

进制格式转换 c#

如何从C#中的字符串中提取十进制数

c# 中int.ToString()的格式化的示例

Python:将字符串转换为十进制数

负十进制数/字符串到 IEEE 单精度格式