2011-04-09 10 views
5

Soy nuevo en Java. Escribí el siguiente código:"Posible pérdida de precisión" en mi programa Java

import java.io.*; 
import java.lang.*; 

public class distravel 
{ 
    public static void main(String args[]) 
    { 
     String a1,a2,a3; 
     int x=2; 
     float d,u,a,t; 
     //d=distance travelled,u=initial velocity,a=acceleration,t=timeinterval 

     try 
     { 
      InputStreamReader read=new InputStreamReader(System.in); 
      BufferedReader buff=new BufferedReader(read); 

      System.out.print("Enter the INTIAL VELOCITY:"); 
      a1=buff.readLine(); 
      u=Float.parseFloat(a1); 
      System.out.print("Enter the ACCELERATION:"); 
      a2=buff.readLine(); 
      a=Float.parseFloat(a2); 
      System.out.print("Enter the TIME:"); 
      a3=buff.readLine(); 
      t=Float.parseFloat(a3); 

      d=((u*t)+a*Math.pow(t,x))/2F; 

      System.out.print("The total DISTANCE TRAVELLED:"+d); 
     } 
     catch(Exception e) 
     {} 
    } 
} 

consigo este error:

 
distravel.java28:possible loss of precision 
            found   :double 
            required  :float 
            d=((u*t)+a*Math.pow(t,x))/2F; 
                  ^

¿Cómo puedo resolver esto?

+0

¿Podría formatear su pregunta correctamente? – Shankar

+4

Que incluye NO GRITAR. – subsub

Respuesta

7
d=((u*t)+a*Math.pow(t,x))/2F; 

debería ser

o declarar como ddouble como GrahamS sugeridos.

+2

O haga 'd' a' double' – GrahamS

+0

@GrahamS: sí. tienes razón. –

+0

TY PARA LA RESPUESTA, REALMENTE APRENDE UR AYUDA –

4

No use flotadores en sus cálculos matemáticos de coma flotante a menos que tenga una razón específica para hacerlo (no es así). La sobrecarga para el tipo preferido, doble, no es mucho mayor y el beneficio en cuanto a la precisión es excelente.

3

Math.pow devuelve el doble, por lo que debe tener el doble para 'd'. O también puedes lanzar 'd' para flotar.

2

Es porque Math.pow() devuelve un doble con el que luego se hacen algunos cálculos. Independientemente de los cálculos que realice, la precisión con la que deberá lidiar es doble. Por lo tanto, aparece el mensaje de error. Soluciones:
1) hacer que los flotadores sean dobles
2) arrojar el resultado a flotar: d = (float) ((u * t) + a * Math.pow (t, x))/2F;

0

porque usted declaró la variable como float que significa su tomar hasta cuatro bytes de espacio de memoria de acceso aleatorio, no es capaz de almacenar todos los datos en la RAM, por lo que tiene que declarar la variable como un double entonces será trabajo.

Cuestiones relacionadas