c# - 在C#中将double格式化为字符串

标签 c# .net formatting

我有一个 Double,其值可能在 0.000001 到 1,000,000,000.000 之间

我希望将此数字格式化为字符串,但有条件地取决于其大小。因此,如果它非常小,我想使用以下格式对其进行格式化:

String.Format("{0:.000000000}", number);

如果不是那么小,比如 0.001,那么我想使用类似的东西

String.Format("{0:.00000}", number);

如果结束了,比如 1,000,然后将其格式化为:

String.Format("{0:.0}", number);

有没有一种聪明的方法可以根据我要格式化的值的大小来构造这个格式字符串?

最佳答案

使用 double 绝对值的 Math.Log10 来计算小数位左侧(如果为正)或右侧(如果为负)需要多少个 0。根据该值选择格式字符串。您需要单独处理零值。

string s;
double epislon = 0.0000001; // or however near zero you want to consider as zero
if (Math.Abs(value) < epislon) {
    int digits = Math.Log10( Math.Abs( value ));
    // if (digits >= 0) ++digits; // if you care about the exact number
    if (digits < -5) {
       s = string.Format( "{0:0.000000000}", value );
    }
    else if (digits < 0) {
       s = string.Format( "{0:0.00000})", value );
    }
    else {
       s = string.Format( "{0:#,###,###,##0.000}", value );
    }
}
else {
    s = "0";
}

或者根据位数动态构造。

关于c# - 在C#中将double格式化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/355020/

相关文章:

c# - 即使该对象在调试器中看起来具有正确的类型,as 运算符也会拒绝该对象

c# - CORS:对预检请求的响应未通过访问控制检查:它没有 HTTP 正常状态

c# - 使用自定义绘制的控件滚动面板

c# - 派生类的打印没有被调用,为什么?

.net - File.WriteAllText 抛出 UnauthorizedAccessException

c# - C# 预处理器指令中的源代码和 PDB 文件中的行号

c - 如何在C中检索字符串的多个子字符串并将它们写入一个字符串?

c# - 线程内的 Threading.Timer 和 Timer 之间的区别

objective-c - 将 [NSDate date] 的日期缩短几个小时

python - 如何保留最新值并删除列中的所有其他值( Pandas )