在char字符串中存储double .C

时间:2015-05-09 05:52:03

标签: c arrays

我正在尝试在char数组中将0到100之间存储。

这是在做什么

else if (average >= 10){
        scores[45] = (average / 10.0) + '0';
        scores[46] = ((int)average % 10) + '0';
        scores[47] = '.';
        scores[48] =  ((average / 10 - (((int)average) / 10)) * 10)+ '0';
        scores[49] = ((int)((average / 10 - ((int)average / 10)) * 100)) % 10 + '0';

    }
    else {
        scores[46] = ((int)average % 10) + '0';
        scores[47] = '.';
        scores[48] = ((average / 10 - (((int)average) / 10)) * 10) + '0';
        scores[49] = ((average / 10 - ((int)average / 10)) * 100)) % 10 + '0';
    }


}

除了第一个数字之后,一切正常。当平均值应为6.00时,我得到6.60。我该如何解决?

顺便说一句,我只存储小数点后的整数部分和2个数字。这就是我所需要的一切

2 个答案:

答案 0 :(得分:1)

你的表情不必要地变得复杂,因为你最终会反复投射和分割一些东西。

我首先确定整个和小数部分的整数表示,然后将i数字打印为:

digit = '0' + value / pow10(i) % 10

当然,您有两位数的值,因此简化为

hi = '0' + val / 10
lo = '0' + val % 10

对于你的例子:

int ival = average * 100 + 0.5;
int iint = ival / 100;
int ifrac = ival % 100;

scores[45] = (iint >= 10) ? '0' +  iint / 10 : ' ';
scores[46] = '0' + iint % 10;
scores[47] = '.';
scores[48] = '0' + ifrac / 10;
scores[49] = '0' + ifrac % 10;

'+ 0.5'用于在将数字转换为整数时对数字进行舍入。

Joachim Pileborg指出,已经有一个可行的解决方案可以解决您的问题:只需使用

snprintf(scores + 45, 6, "%5.2f", average);

答案 1 :(得分:0)

只需使用snprintf。没有麻烦的工作