繁体   English   中英

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

[英]Format decimal to number of decimal places without scientific notation

我目前正在使用代码格式化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.1234567.ToString("0.####")

还要检查自定义数字格式字符串

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

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

舍入和定点格式字符串

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

使用String.Format()方法。

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

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

我同意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#中执行此操作,也许有,但我找不到它。

所以我想出了这个。 我可以转换为字符串并测量小数点前的长度。 但把它转换成字符串两次感觉不对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM