【问题标题】:Double to string conversion (engineering format)双精度转字符串(工程格式)
【发布时间】:2012-03-16 22:11:39
【问题描述】:

我正在寻找一种使用非常具体的字符串格式的方法:

 -2.71405E-03  0.00000E+00 -2.71405E-03 -2.71405E-03  0.00000E+00 -2.71405E-03
 -2.71405E-03 -2.71405E-03 -2.71405E-03 -2.71405E-03 -2.71405E-03 -2.71405E-03
 -2.71405E-03 -2.71405E-03 -2.71405E-03 -5.42809E-03 -2.71405E-03 -2.71405E-03

UFF58 文件中使用的格式。这种格式用 FORTRAN 格式字符串E13.5 描述,这意味着 13 个(与 C/C++ 等语言不同,它也是上限)字符,5 个十进制数字。 我有这个代码:

double d = -2.71405E-03;
d.ToString( "E5" ).Dump();

在 LINQPad 中,这会给出输出:-2.71405E-003

我找不到NumberFormatInfo 类的任何属性,它可以限制指数的大小(使用的字符数)。知道如何通过更改格式字符串或 NumberFormatInfo 来解决它吗?

【问题讨论】:

    标签: c# double string-formatting


    【解决方案1】:

    如果你需要它在小数点后有5位数字,你可以这样做:

    double d = -2.71405E-03;
    d.ToString("0.00000E+00");
    

    【讨论】:

    • 您应该使用E+00,而不是E-00,因为- 不会在指数中产生+ 符号。
    • 谢谢你,你说得对,它会给Enn而不是E+nn!改变了。
    【解决方案2】:

    试试这个:

    string MyString = d.ToString("0.#####E-00");
    

    【讨论】:

    • +1(删除格式字符串中的一个空格)我补充一下,考虑到格式是固定的,他应该指定CultureInfo.InvariantCulture
    • #s 表示格式不是真正的固定宽度。例如,对于 0,它会产生 0E00,这似乎不是 OP 想要的。
    • 确切地说,我的示例数据中的一个值是0.00000E+00,这意味着无论如何,在这里使用# 不是一个正确的解决方案,因为在看到这个答案之后,我可以创建正确的自己解决
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2013-09-23
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多