[英]C# number format: display n significant number of digits?
有没有办法格式化一个double值,使它只显示n个siginifacant数字?
例如,我有一个值为123456的double,我们可以有一个格式字符串,只显示前3位数字。
double x=12346;
string s=x.ToString("Some format"); //display 123 only
那可能吗?
虽然有些格式可以让你删除部分或全部分数,但是没有格式可以让你删除整个部分的一些有效数字。
如果您想保留整数的前三位数,则需要将该值除以使其整个部分只有三位数。
计算除数的一种方法是记录10 N,检查它是否大于2,并将10除以相应的幂:
private static void Print(double x) {
int n = (int)Math.Log10(x);
if (n > 2) {
x /= Math.Pow(10, n-2);
}
Console.WriteLine((int)x);
}
你不能将double的最大部分格式化为3 sig。 图。 但你可以拆分字符串。 尝试:
String s = x.ToString().Substring(0, n);
其中n
是您希望保留的有效数字的数量。
我为这个例子做了一个控制台应用程序。 我知道你需要一个double或int数据类型的数字,但我不知道如何操纵点后的十进制数,所以我使用了一个字符串(如果你不介意,将数值存储在字符串数据类型中):
string number = "";
string digits = "";
int n = 0;
int count = 0;
number = "45.6";
//number = "456";
n = 3;
if (number.Contains('.')) //If the number has decimals...
{
if (n < number.Length)
{
if (number.IndexOf('.') < n)
{
while (count <= n) //... we will count the number in a different way.
{
if (number[count] != '.')
{
digits = digits + number[count];
}
count++;
}
}
else
{
while (count < n)
{
if (number[count] != '.')
{
digits = digits + number[count];
}
count++;
}
}
}
}
else
{
if (n <= number.Length)
{
while (count < n) //If not, we count without the decimal point.
{
digits = digits + number[count];
count++;
}
}
}
Console.WriteLine("N significant digits: " + digits);
您可以尝试使用十进制和整数,但在代码中,它们都是字符串。 正如我之前所说,如果您不介意使用此数据类型,此示例将帮助您,如果没有,您可以尝试使用String类中的“Substring”函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.