levuphuong
17-05-2012, 08:14 PM
Hiện mình đang làm máy tính bỏ túi với 16f887
phần tính toán số nguyên gần như đã xong nhưng phần thập phân còn bị tí lỗi
vd như mình nhâp 0.075 thì nó ra là 0.07499999
Để mình gửi các bạn file ccs,protue và 1 file mình đã chuyển qua c++ trên máy tính (mình đính kèm bên dưới đó). mình đã lượt bỏ chỉ còn phần hiện thị cho đỡ rối.code cũng như c++ bên dưới ah.
Mình thấy protus nó sample chạy xuất kết quả ra ko bị lỗi trên nhưng khi build thủ file c của nó thì lại không đúng chắc file .d39 cho protus ko liên quan tới mấy file c quá :)
Code bên dưới mình muốn tách chữ số thap phần ra từng phần tử lưu vào mảng rồi xuất ra
#include <iostream.h>
#include<math.h>
void calc_display(char *buf)
{
for(int i=0;buf[i]!=0;i++)
{
cout<<endl<<buf[i] ;
}
}
void calc_format (float f)
{
char buf [10+1];
float divisor = 100000000;
float digit;
int pad=0, p=0;
f=(floor(f* 100000+0.5))/100000 ; ///DÒNG NÀY CÓ THỂ BỎ,MÌNH MUỐN
//làm tron 5 chữ số nhưng ko dc
// Sort out minus sign:
if (f >= 0)
buf[p++] = ' ';
else
{ buf[p++] = '-';
f = -f;
}
if (f >= divisor)
buf[p++] = 'E';
else
while (p < 10&& (divisor > 1 || f >= 0.0000001))
{ divisor /= 10;
digit = floor(f/divisor);
if (divisor < 1 && divisor > 0.01)
buf[p++] = '.';
if (digit != 0 || divisor < 10)
{ buf[p++] = digit + '0';
pad = 1;
}
else if (pad)
buf[p++] = '0';
f -= digit*divisor;
}
buf[p] = 0;
calc_display(buf);
}
int main()
{
float x=0.75 ; ////////Mọi người thay đổi giátrị này để test giúp mình nha
calc_format(x) ;
}
phần tính toán số nguyên gần như đã xong nhưng phần thập phân còn bị tí lỗi
vd như mình nhâp 0.075 thì nó ra là 0.07499999
Để mình gửi các bạn file ccs,protue và 1 file mình đã chuyển qua c++ trên máy tính (mình đính kèm bên dưới đó). mình đã lượt bỏ chỉ còn phần hiện thị cho đỡ rối.code cũng như c++ bên dưới ah.
Mình thấy protus nó sample chạy xuất kết quả ra ko bị lỗi trên nhưng khi build thủ file c của nó thì lại không đúng chắc file .d39 cho protus ko liên quan tới mấy file c quá :)
Code bên dưới mình muốn tách chữ số thap phần ra từng phần tử lưu vào mảng rồi xuất ra
#include <iostream.h>
#include<math.h>
void calc_display(char *buf)
{
for(int i=0;buf[i]!=0;i++)
{
cout<<endl<<buf[i] ;
}
}
void calc_format (float f)
{
char buf [10+1];
float divisor = 100000000;
float digit;
int pad=0, p=0;
f=(floor(f* 100000+0.5))/100000 ; ///DÒNG NÀY CÓ THỂ BỎ,MÌNH MUỐN
//làm tron 5 chữ số nhưng ko dc
// Sort out minus sign:
if (f >= 0)
buf[p++] = ' ';
else
{ buf[p++] = '-';
f = -f;
}
if (f >= divisor)
buf[p++] = 'E';
else
while (p < 10&& (divisor > 1 || f >= 0.0000001))
{ divisor /= 10;
digit = floor(f/divisor);
if (divisor < 1 && divisor > 0.01)
buf[p++] = '.';
if (digit != 0 || divisor < 10)
{ buf[p++] = digit + '0';
pad = 1;
}
else if (pad)
buf[p++] = '0';
f -= digit*divisor;
}
buf[p] = 0;
calc_display(buf);
}
int main()
{
float x=0.75 ; ////////Mọi người thay đổi giátrị này để test giúp mình nha
calc_format(x) ;
}