2017-07-25 90 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

虽然这可能是一个有价值的提示来解决问题,但一个好的答案也可以证明解决方案。请[编辑]提供示例代码以显示您的意思 - 并说明这与其他答案有何不同。或者,可以考虑将其写为注释。 –