格式十进制到没有科学记数法的小数位数

时间:2015-09-16 06:11:15

标签: c#

我目前正在使用代码格式化double:

myDouble.ToString("g4");

获取前4位小数。但是我发现,如果数字非常大或非常小,我会经常切换到科学记数法。 C#中是否有一个简单的格式字符串,只有前四个小数位,如果它太小而无法在该位数中表示,则为零?

例如,我想:

1000 => 1000
0.1234567 => 0.1235
123456 => 123456 (Note: Not scientific notation)
0.000001234 => 0 (Note: Not scientific notation)

3 个答案:

答案 0 :(得分:4)

您可以尝试这样:

0.1234567.ToString("0.####")

同时检查Custom Numeric Format Strings

  

<强>#

     

将“#”符号替换为相应的数字(如果有)   当下;否则,结果字符串中不会出现数字。

同样正如乔恩所指出的那样,它将围绕你的号码。请参阅注释部分

  

舍入和定点格式字符串

     

对于定点格式字符串   (即,不包含科学记数法的格式字符串   格式字符),数字四舍五入到小数位数   小数点右边有数字占位符。

答案 1 :(得分:3)

使用 String.Format()方法。

String.Format("{0:0.####}", 123.4567123); //output: 123.4567

注意:#的数字表示小数点后最大位数。

答案 2 :(得分:0)

我同意kjbartel的评论。 我想知道最初的问题是什么。但是他的问题有点模棱两可。

###格式的问题是,如果可以显示或不显示数字,它将填充插槽。 这样就可以满足原始问题的要求,而其他一些则不需要。

我的基本需求是,这很常见,如果数字很大,我不需要显示小数位。如果数字很小,我想显示小数位。基本上是X个有效数字。

“ Gn”格式将使用有效数字,但是如果您超过数字位数,它将转换为科学计数法。我永远都不需要E表示法(与问题相同的要求)。

所以我使用固定格式(“ Fn”),但是我根据数字有多大来动态计算宽度。

var myFloatNumber = 123.4567;
var digits = (int) Math.Log10(myFloatNumber);
var maxDecimalplaces = 3;
var format = "F" + Math.Max(0,(maxDecimalplaces - digits));

我发誓有一种方法可以在C ++(Visual Studio Flavor)中使用格式语句或C#来实现,也许有,但是我找不到。

所以我想到了这个。我也可以转换为字符串,并在小数点之前测量长度。但是将其两次转换为字符串感觉很错误。