char q[150];
void main(void){
System_Initialization();
UART_Init_2();
while(1){
double A=23.045610;
sprintf(q,"%f\r\n",A);
UART_Tx_2(q);}}
当我读取A的值时,它给出23.045410而不是23.045610 有人知道为什么会这样吗? 我正在使用PIC18F67k22控制器和Xc8编译器
答案 0 :(得分:2)
在PIC18上,float和double的数据类型相同,只有32位长。这不足以存储超过五位左右的十进制数字。因此,在小数结尾处可能会出现一些舍入误差。