簡體   English   中英

C-獲取雙精度位數

[英]C - Get the number of digits in a double

已經提出了這個問題,但我找不到令人滿意的答案。

我需要獲得雙精度數而不知道它是什么,並且零可以在任何地方。

例如,如果它是12.00032110,我需要獲取數字11(帶點並在末尾計數零)

我嘗試將它們轉換為字符串以獲取其長度,但是為此,我需要事先知道其長度,因為我需要指定精度。 如果我使用“%.5f”,那么它們都將在點后有5位數字,因此我無法獲得其原始長度。 如果我使用“%f”,則所有較長的都將被截斷,並且無法獲得其原始長度。

有什么解決方案? 我整天都在尋找答案,但沒有成功。

您可以嘗試找到最短的字符串,該字符串將在轉換為十進制浮點數時產生您的數字。 下面的功能通過提高寫入精度和重復掃描來做到這一點(假設您提供足夠長的char緩沖區):

char *strfloat(char buf[], int n, double d)
{
    int p;

    for (p = 0; p < 20; p++) {
        double x;

        if (snprintf(buf, n, "%.*g", p, d) >= n) break;;
        sscanf(buf, "%lf", &x);
        if (x == d) break;
    }

    return buf;
}

你的長度是strlen由緩沖區中的字符串。 但是,您永遠不會得到帶有尾隨零的小數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM