保留一位有效数的有关问题,很怪异。大家来看看
保留一位有效数的问题,很怪异。。。大家来看看
输出是
1.950000,8.950000,6.650000
2.0,8.9,6.7
问:为啥8.95输出时不进位,而头尾两个数却进位了??
------解决方案--------------------
double dat[3] = {1.95,8.95,6.65};
几乎没有一个 10进制 可以 变成 精确的 2进制数。
上面这条 语句 可能已经 带来 误差。
------解决方案--------------------
只是针对浮点数吧。
整型应该还是可以的。
浮点数对精度不要太较真。
不然就有效位保存多几位再自己加以判断。
比如:6.65你先保存成6.650,然后自己判断减去整数部分是大于0.5还是小于0.5,再做进退位处理。
另外,与0.5的比较也存在实际误差。别太理想化。
void main()
{
double dat[3] = {1.95,8.95,6.65};
printf("%f, %f, %f\n",dat[0],dat[1],dat[2]);
printf("%.1f, %.1f, %.1f\n",dat[0],dat[1],dat[2]);
}
输出是
1.950000,8.950000,6.650000
2.0,8.9,6.7
问:为啥8.95输出时不进位,而头尾两个数却进位了??
------解决方案--------------------
double dat[3] = {1.95,8.95,6.65};
几乎没有一个 10进制 可以 变成 精确的 2进制数。
上面这条 语句 可能已经 带来 误差。
------解决方案--------------------
只是针对浮点数吧。
整型应该还是可以的。
浮点数对精度不要太较真。
不然就有效位保存多几位再自己加以判断。
比如:6.65你先保存成6.650,然后自己判断减去整数部分是大于0.5还是小于0.5,再做进退位处理。
另外,与0.5的比较也存在实际误差。别太理想化。