Hola quisiera que me ayuden con este problema que tengo he hecho una calculadora basica usando el mikroc y usando el pic 16f887, funcionan las cuatro operaciones basicas pero al momento de hacer una operacion por ejemplo la suma de 15 + 24 me sale 38.99999 y nose como redondearlo he utilizado la funcion ceil pero nada les dejo el programa para que alguien lo pueda arreglar y hasta mejorarlo porque solo realiza operaciones con numeros enteros y no decimales ya que nose como introducir el punto decimal gracias por sus respuestas.
sbit LCD_RS at RB1_bit;
sbit LCD_EN at RB0_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB0_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
char cadena[15];
unsigned short int tabla[16]=
{
0,1,2,3,
4,5,6,7,
8,9,'+','-',
'*','/','^','=',
};
double numero[3];
unsigned short int dato;
unsigned short int col;
unsigned short index;
double resultado;
unsigned char signo;
void main() {
col=1;
index=0;
resultado=0;
ANSEL=0;
ANSELH=0;
trisa=0xff;
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
while (1)
{
if (RA4_bit)
{
dato=porta & 0x0f;
if (tabla[dato]>=0&&tabla[dato]<=9)
{
numero[index]=tabla[dato]+numero[index]*10;
Lcd_Chr(1,col,tabla[dato]|0x30);
col++;
}
else if (tabla[dato]!='=')
{
Lcd_Chr_CP(tabla[dato]);
signo=tabla[dato];
col++;
index=1;
}
else
{
switch (signo)
{
case '+':
resultado=numero[0]+numero[1];
break;
case '-':
resultado=numero[0]-numero[1];
break;
case '*':
resultado=numero[0]*numero[1];
resultado=ceil(resultado);
break;
case '/':
resultado=numero[0]/numero[1];;
break;
case '^':
resultado=pow(numero[0],numero[1]);
break;
}
floatToStr(resultado,cadena);
Lcd_out(2,1,rtrim(cadena));
}
while(RA4_bit);
}
}
}[code=cpp]
[/code]