c# - 将 C# Double 格式化为科学记数法的三倍数

标签 c# double string-formatting scientific-notation

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

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

3.123e+003
19.523e+003

而不是:

3.123e+003
1.952e+004

我相信,拥有三的倍数的所有幂会让我的表格更容易扫描。

提前致谢

最佳答案

我认为您需要编写自己的函数。 首先,您可以获得数字的科学表示形式,其精度比您需要的大两位数。 然后你应该解析结果字符串以获得浮点系数和 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() + "}E{1}{2:D3}";
    return string.Format(fstr2, coeff, ((index < 0) ? "-" : "+"), Math.Abs(index));
}

关于c# - 将 C# Double 格式化为科学记数法的三倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7011236/

相关文章:

java - 较小的有限值 double - Java

java - java中计算两个int的平均值并转换为double

python - python中的字符串格式化

c# - 如何获取属性网格以允许编辑多选对象

c# - 仅在一侧缩放游戏对象

Java - double*int 算术显示两位小数或几个小数位

java - 使用 String.format() 作为注释属性值

c# - 如何配置版本化实体之间的一对多/多对一关系

c# - 允许全局地址列表 (GAL) 集成的 ASP.NET 控件

java String.Format ("%02d")产生奇怪的 unicode 字符