将 C# Double 格式化为以三的倍数为单位的科学记数法

Posted

技术标签:

【中文标题】将 C# Double 格式化为以三的倍数为单位的科学记数法【英文标题】:Format C# Double to Scientfic Notation in powers with multiples of three 【发布时间】:2011-08-10 13:05:29 【问题描述】:

我正在尝试以科学格式格式化一些大数,但我需要三的倍数的幂。有推荐的方法吗?

我在表格中有一系列数字,而不是真正的科学格式(小数点前有一个数字),我很高兴进行这种更改,以便获得三的倍数的幂,例如:

3.123e+003 19.523e+003

而不是:

3.123e+003 1.952e+004

我相信,将所有的幂都设为 3 的倍数会使我的表格更易于扫描。

提前致谢

【问题讨论】:

这通常被称为“工程符号”,也在这个问题中讨论:***.com/questions/808104/engineering-notation-in-c。 谢谢 B 皮特。看过那篇帖子,但由于我不是工程师,我开始对单位感到困惑,同事刚刚询问了三的倍数,不一定是表中的单位。不过有趣的帖子,我可能会将它作为一个选项浮动:) 无论您是否使用单位名称(m,k,...),我认为其他问题中讨论的某些方法可能有助于解决您所说的问题。 【参考方案1】:

我认为您需要编写自己的函数。 首先,您可以获得数字的科学表示,其精度比您需要的大两位数。 然后你应该解析结果字符串以获得浮点系数和 10 的幂指数作为十进制类型的数字。之后,您将除法索引的其余部分分析为 3,并以适当的方式更改数字。最后生成输出字符串。

static string Scientific3(double value, int precision)

    string fstr1 = "0:E" + (precision+2).ToString() + "";
    string step1 = string.Format(fstr1, value);
    int index1 = step1.ToLower().IndexOf('e');
    if (index1 < 0 || index1 == step1.Length - 1)
        throw new Exception();
    decimal coeff = Convert.ToDecimal(step1.Substring(0, index1));
    int index = Convert.ToInt32(step1.Substring(index1 + 1));
    while(index%3!=0)
    
        index--;
        coeff *= 10;
    
    string fstr2 = "0:F" + precision.ToString() + "E12:D3";
    return string.Format(fstr2, coeff, ((index < 0) ? "-" : "+"), Math.Abs(index));

【讨论】:

啊,酷!没想到分析已经解析的字符串并从那里操作它。将其写入转换器并试一试,感谢您的想法和代码:D

以上是关于将 C# Double 格式化为以三的倍数为单位的科学记数法的主要内容,如果未能解决你的问题,请参考以下文章

以秒为单位将时间间隔格式化为 X 小时(秒) Y 分钟(秒) Z 秒(秒)

棋盘划分问题中4的k次方减一是三的倍数

Javascript 将数字格式化为 C#

将 Double 值格式化为 2 个小数位的最佳方法 [重复]

C# DateTime 将日期字符串格式化为带时区的日期格式

ReactJs / Flex-box 在三的倍数之间对齐