delphi C#中是否有内置的格式说明符或函数将双精度值转换为具有固定位数的字符串?

bwleehnv  于 2022-11-04  发布在  C#
关注(0)|答案(1)|浏览(139)

我需要将一些 Delphi 代码移植到C#,它使用了Delphi的“g”格式说明符。
常规。参数必须是浮点值。该值使用固定格式或科学计数格式转换为尽可能短的十进制字符串。结果字符串中的有效数字位数由格式字符串中的精度说明符给定;如果没有精度说明符,则假定默认精度为15。从结果字符串中删除尾随零,仅在必要时才显示小数点。如果值中小数点左侧的位数小于或等于指定的精度,则结果字符串使用定点格式。如果值大于或相等0.00001,则为。否则,产生的字串会使用科学记数法格式。
以下是一些示例:

Format("%.2g", 123456789.123456789) => 1.2E008
Format("%.3g", 123456789.123456789) => 1.23E008
Format("%.6g", 123456789.123456789) => 1.23457E008
Format("%.15g", 123456789.123456789) => 123456789.123
Format("%.15g", 2.0) => 2

是否有生成相同结果的内置C# .Net函数?

fafcakar

fafcakar1#

请尝试使用g(或Gformat规范(fiddle):

string[] tests = new string[] {
        "g2",
        "g3",
        "g6",
        "g15",
    };

    double value = 123456789.123456789;

    var result = string.Join(Environment.NewLine, tests
        .Select(test => $"{value} => {value.ToString(test)} ({test})"));

    Console.WriteLine(result);

    Console.WriteLine();

    value = 2.0;

    result = string.Join(Environment.NewLine, tests
        .Select(test => $"{value} => {value.ToString(test)} ({test})"));

    Console.WriteLine(result);

输出:

123456789.12345679 => 1.2e+08 (g2)
123456789.12345679 => 1.23e+08 (g3)
123456789.12345679 => 1.23457e+08 (g6)
123456789.12345679 => 123456789.123457 (g15)

2 => 2 (g2)
2 => 2 (g3)
2 => 2 (g6)
2 => 2 (g15)

相关问题