我目前正在使用代码格式化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)
答案 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#来实现,也许有,但是我找不到。
所以我想到了这个。我也可以转换为字符串,并在小数点之前测量长度。但是将其两次转换为字符串感觉很错误。