2013-03-21 1 views
0

1- long xValue = someValue;Java cast double to long exception

2- long yValue = someValue;

3- long otherTolalValue = (long) (xValue - yValue);

Эта строка кода дает мне следующее исключение:

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long.

  • Update:

кусок кода:

StackedBarChart<String,Number> sbc = new StackedBarChart<String,Number>(); 

XYChart.Series<String, Number> series = new XYChart.Series<String, Long>(); 
series.getData.add(new XYChart.Data<String, Number>("X1",150)); 
series.getData.add(new XYChart.Data<String, Number>("X2",50)); 
sbc.getData.add(series); 
long dif = getDif(sbc); 

long getDif(XYChart barChart){ 
XYChart.Series series = (XYChart.Series).getData().get(0); 
// X1 at zero position i dont have to use iIterator now. 
XYChart.Data<String, Long> seriesX1Data = series.getData().get(0); 
XYChart.Data<String, Long> seriesX2Data = series.getData().get(1); 

long x1Value = seriesX1Data.getYValue(); 
long x2Value = seriesX1Data.getYValue(); 
// line - 3 - exception on the next line 
// -4- long value = (x1Value) - (x2Value); 
long value = (long)(x1Value) - (long)(x2Value); 
return value; 
} 
  • После отладки я нашел это.

seriesX1Data,seriesX2Data содержит двойные значения as the passed chart has Number type но getYvalue() возвращает долго, поэтому программа аварии во время выполнения с тем исключением, но когда я бросил в линии, почему не выкидывала успех. Я думаю, что компилятор видит, что тип уже длинный!.

+0

И что? В чем вопрос? – Matten

+3

Каков тип 'someValue'? – Zutty

+2

Проверьте стек. Исключение может быть возможно только в первой или второй строке, а не в последней. В самом деле, в последней строке типизация является избыточной. –

ответ

2

Это невозможно

long xValue = someValue; 
long yValue = someValue; 
long otherTolalValue = (long)(xValue - yValue); 

ни один из 3-х линий может производить java.lang.ClassCastException

Если предположить someValues ​​является двойной,

Double someValue = 0.0; 

это дало бы ошибку компиляции: Несоответствие типов : не может конвертировать Двойной к длинному

+0

это не ошибка компиляции, исключение происходит во время выполнения. но то, что происходит во время выполнения программы, ожидает долгое время, но обнаружило некоторую ценность, как вы говорите. приложите к вопросу обновление. –

2
long xValue = (long)someValue; 
// or : 
long yValue = new Double(someValue).longValue(); 

long otherTolalValue = xValue - yValue; 

Но имейте в виду, что вы потеряете точность.

+0

someValue уже давно исключение возникает в третьей строке. –

0

Предполагается, что someValue является double. Для того, чтобы присвоить его long вам нужно бросить его:

long xValue = (long) someValue; 
1

Я не понимаю, почему ваш код не получится, но следующие прекрасно работает.

public class CastingDoubleToLongTest { 

     @Test 
     public void testCast(){ 
     double xValue = 12.457; 
     double yValue = 9.14; 

     long diff = new Double(xValue - yValue).longValue(); 

     Assert.assertEquals(3, diff); 
     } 
    } 
+0

Я нашел причину любезно взглянуть на мой вопрос 'Update'. –