我正在尝试在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个数字。这就是我所需要的一切
答案 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。没有麻烦的工作