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#格式双重限制有效数字但限制科学记数法的主要内容,如果未能解决你的问题,请参考以下文章
js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制