有没有办法格式化一个double值,只显示n个siginifacant数字?
例如我有一个值为123456的double,我们可以有一个格式字符串,只显示前3位数字。
double x=12346;
string s=x.ToString("Some format"); //display 123 only
可能吗?
答案 0 :(得分:0)
虽然有些格式可以让你删除部分或全部分数,但是没有任何格式可以让你删除整个部分的一些有效数字。
如果您想保留整数的前三位数,则需要对该值进行除法,使其整个部分只有三位数。
计算除数的一种方法是记录log 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);
}
答案 1 :(得分:0)
您不能将double的最大部分格式化为3 sig。图。但你可以拆分字符串。尝试:
String s = x.ToString().Substring(0, n);
n
是您希望保留的重要数字的数量。
答案 2 :(得分:0)
我为这个例子制作了一个控制台应用程序。我知道你需要一个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);
您可以尝试使用十进制和整数,但在代码中,它们都是字符串。正如我之前所说的,如果您不介意使用这种数据类型,这个例子将帮助您,如果没有,您可以尝试使用&#34; Substring&#34; String类中的函数。