在C#编程中,Double类型的数值经常需要转换为特定格式的字符串,比如保留固定小数位数、显示为百分比、添加千位分隔符等,这些需求都可以通过字符串格式化功能实现。不同的格式化方式对应不同的使用场景,掌握这些方法能让数值显示更符合业务要求。

标准数值格式字符串
标准数值格式字符串使用单个格式说明符来定义数值的通用格式,C#为Double类型提供了多种内置的标准格式,使用起来非常便捷。
常用标准格式说明符
- C 或 c:货币格式,会根据当前系统的区域设置显示货币符号,默认保留两位小数
- F 或 f:固定点格式,指定小数位数,默认保留两位
- N 或 n:数字格式,会添加千位分隔符,默认保留两位小数
- P 或 p:百分比格式,数值会乘以100并添加百分号,默认保留两位小数
- E 或 e:科学计数法格式,可指定指数部分的位数
- G 或 g:通用格式,会根据数值大小自动选择定点或科学计数法表示
标准格式使用示例
下面的代码展示了不同标准格式说明符的实际输出效果:
using System;
class Program
{
static void Main()
{
double num = 1234.56789;
// 货币格式
Console.WriteLine("货币格式 C:" + num.ToString("C"));
Console.WriteLine("货币格式 C3(保留3位小数):" + num.ToString("C3"));
// 固定点格式
Console.WriteLine("固定点格式 F:" + num.ToString("F"));
Console.WriteLine("固定点格式 F1:" + num.ToString("F1"));
// 数字格式(带千位分隔符)
Console.WriteLine("数字格式 N:" + num.ToString("N"));
Console.WriteLine("数字格式 N0(无小数):" + num.ToString("N0"));
// 百分比格式
Console.WriteLine("百分比格式 P:" + num.ToString("P"));
Console.WriteLine("百分比格式 P1:" + num.ToString("P1"));
// 科学计数法格式
Console.WriteLine("科学计数法 E:" + num.ToString("E"));
Console.WriteLine("科学计数法 E2:" + num.ToString("E2"));
// 通用格式
Console.WriteLine("通用格式 G:" + num.ToString("G"));
Console.WriteLine("通用格式 G4:" + num.ToString("G4"));
}
}
自定义数值格式字符串
如果标准格式无法满足需求,还可以使用自定义数值格式字符串,通过组合不同的格式说明符来定义个性化的显示规则。
常用自定义格式说明符
| 说明符 | 作用 | 示例 | 输出结果 |
|---|---|---|---|
| 0 | 零占位符,如果对应位置没有有效数字则显示0 | 1234.5.ToString("00000.00") | 01234.50 |
| # | 数字占位符,对应位置没有有效数字则不显示 | 1234.5.ToString("#####.##") | 1234.5 |
| . | 小数点占位符,指定小数点的位置 | 1234.567.ToString("0.00") | 1234.57 |
| , | 千位分隔符,或者缩放数值(每出现一次缩小1000倍) | 12345.ToString("#,##0") | 12,345 |
| % | 百分比占位符,数值会乘以100并添加% | 0.1234.ToString("0.00%") | 12.34% |
| ; | 分段说明符,分别定义正数、负数、零的格式 | 123.ToString("0.00;负0.00;零") | 123.00 |
自定义格式使用示例
下面的代码展示了自定义格式的常见用法:
using System;
class Program
{
static void Main()
{
double num1 = 1234.5678;
double num2 = -1234.5678;
double num3 = 0;
// 零占位符和数字占位符结合
Console.WriteLine("自定义格式 0000.00:" + num1.ToString("0000.00"));
Console.WriteLine("自定义格式 ####.##:" + num1.ToString("####.##"));
// 千位分隔符
Console.WriteLine("千位分隔符 #,##0.00:" + num1.ToString("#,##0.00"));
// 缩放数值(每两个逗号缩小1000000倍)
Console.WriteLine("缩放数值 0,,.00:" + num1.ToString("0,,.00"));
// 百分比格式
Console.WriteLine("自定义百分比 0.0%:" + (num1 / 100).ToString("0.0%"));
// 分段格式(正数、负数、零分别定义)
string format = "0.00;负0.00;零";
Console.WriteLine("正数格式化:" + num1.ToString(format));
Console.WriteLine("负数格式化:" + num2.ToString(format));
Console.WriteLine("零格式化:" + num3.ToString(format));
}
}
使用String.Format方法格式化
除了直接调用Double类型的ToString方法,还可以使用String.Format方法来实现Double的格式化,这种方式在需要拼接多个变量时更加方便。
示例代码如下:
using System;
class Program
{
static void Main()
{
double price = 99.9;
double count = 3;
double total = price * count;
// 使用String.Format拼接格式化后的字符串
string result = String.Format("单价:{0:C2},数量:{1},总金额:{2:C2}", price, count, total);
Console.WriteLine(result);
// 也可以使用复合格式化字符串(C# 6.0及以上支持)
string result2 = $"单价:{price:C2},数量:{count},总金额:{total:C2}";
Console.WriteLine(result2);
}
}
注意事项
- 格式化操作不会改变Double本身的数值,只会生成对应的字符串表示
- 标准格式说明符不区分大小写,但是自定义格式中的部分说明符大小写可能有不同含义,比如E和e表示科学计数法时指数的大小写不同
- 如果指定的格式说明符无效,会抛出
FormatException异常,使用时需要确保格式字符串正确 - 不同区域设置下的货币符号、千位分隔符、小数点符号可能不同,默认会使用当前线程的区域设置,也可以通过传递
IFormatProvider参数指定特定区域
在实际开发中,建议根据具体的显示需求选择合适的格式化方式,优先使用标准格式字符串处理通用场景,复杂场景再使用自定义格式字符串,这样能让代码更简洁易维护。
C#Double字符串格式ToStringString_format修改时间:2026-07-18 23:27:15