2017-07-25 127 views
0

小數我想,如果他們是0。例如我的雙打打印double與C中的printf語句只小數位,但不是第一個小數打印的雙重

double number1 = 0.95; 
double number2 = 0.05; 

number 1應打印爲95number 2應打印爲5

+4

然後顯示你的嘗試。 –

+0

你可以使用'sprintf()'和'strchr()'...但沒有函數直接做你在這裏問的問題,所以這個問題看起來像是寫代碼的請求。 –

+1

「小數位」是什麼意思?二進制浮點數沒有「小數位」 –

回答

0

事情是這樣的:

#include <stdio.h> 
#include <string.h> 

const char *trailingDecimals(char *buffer, size_t bufsize, double val) 
{ 
    static const char *empty = ""; 
    snprintf(buffer, bufsize, "%.20f", val); 
    char *result = strchr(buffer, '.'); 
    if (!result) return empty; 
    while (*++result == '0'); 
    char *tail = buffer + strlen(buffer) - 1; 
    if (*tail == '0') 
    { 
     while (*--tail == '0'); 
     *++tail = 0; 
    } 
    return result; 
} 

int main(void) 
{ 
    double test = 12.00506; 
    char buf[64]; 
    puts(trailingDecimals(buf, 64, test)); 
} 

但要注意的問題,精度比你預計你可能會得到更多的地方。

0

您可以使用sprintf並跳過「0」。從你的輸出緩衝區。

+0

雖然這可能是一個有價值的提示來解決問題,但一個好的答案也可以證明解決方案。請[編輯]提供示例代碼以顯示您的意思 - 並說明這與其他答案有何不同。或者,可以考慮將其寫爲註釋。 –