C#格式双重限制有效数字但限制科学记数法

Posted

技术标签:

【中文标题】C#格式双重限制有效数字但限制科学记数法【英文标题】:C# Format double limiting significant digits but restrict scientific notation 【发布时间】:2020-04-28 22:42:05 【问题描述】:

我想格式化我的 double 值,限制为 2 个有效位置,但不是数字的整数部分。

目前我使用G2 表示法,但如果整数部分包含超过2 个位置,它会以科学计数法显示数字。

我也试过0.##,但它在小数部分保留2个重要位置,无论整数1中有多少。

我想要的是这个:

1234     => 1234
123.4    => 123
12.34    => 12
1.234    => 1.2
0.1234   => 0.12
0.01234  => 0.012
0.001234 => 0.0012

这是什么标准的做法,还是我应该自己重新发明***?

【问题讨论】:

我不明白这里的逻辑。为什么 12.34 变成 12,而 1.234 变成 1.2? 逻辑很简单:我不需要超过 2 个有效位精度,但我想避免使用科学记数法。 12.34 在整数部分确实有 2 个位置,所以我不需要小数部分。 1.234 没有,所以我需要一个小数部分。 所以...您至少需要两位大于 0 的数字(基于您上次的编辑)? 是的,没错 这种格式是否有特定的科学或标准化名称? 【参考方案1】:

我想不出办法,因为它有点不合常规,但这个扩展可能会起作用:

public static string DoubleLimited(this double n)      
    return n < 100 ? $"n:G2" : n.ToString("#0.");

习惯了

var num = 1234.0;
Console.WriteLine(num.DoubleLimited());

【讨论】:

我想使用自定义格式说明符来制作它(因此可以在例如 WPF 格式说明符中使用它),但这似乎是不可能的。您的解决方案完美运行。

以上是关于C#格式双重限制有效数字但限制科学记数法的主要内容,如果未能解决你的问题,请参考以下文章

PAT 1024. 科学计数法 (20)

PAT乙级 1024. 科学计数法 (20)

js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制

没有科学记数法的显示双重[重复]

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

java 使用POI导出excel模板,如何限制某列的显示格式为文本?比如输入身份证号,默认会用科学计数法