[英]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.