17-05-2012, 08:14 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Jul 2011
Bài gửi: 25
: |
[Hỏi] dấu chấm động trên CCS
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 Code:
#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) ; } |
|
|