Я хочу получить сумму значения столбца Jtable (int + float) [duplicate]

Другим случаем, когда NullReferenceExceptions может случиться, является (неправильное) использование оператора as :

class Book {
    public string Name { get; set; }
}
class Car { }

Car mycar = new Car();
Book mybook = mycar as Book;   // Incompatible conversion --> mybook = null

Console.WriteLine(mybook.Name);   // NullReferenceException

Здесь Book и Car являются несовместимыми типами; a Car не может быть преобразован / передан в Book. Когда этот сбой завершается неудачно, as возвращает null. Используя mybook после этого, вы вызываете NullReferenceException.

В общем случае вы должны использовать cast или as, как показано ниже:

Если вы ожидаете преобразования типа в всегда преуспевает (т. е. вы знаете, какой объект должен быть впереди времени), тогда вы должны использовать cast:

ComicBook cb = (ComicBook)specificBook;

Если вы не уверены в типе, но хотите попробовать , чтобы использовать его как определенный тип, затем используйте as:

ComicBook cb = specificBook as ComicBook;
if (cb != null) {
   // ...
}

54
задан Kevin Boyd 20 September 2009 в 14:13
поделиться

8 ответов

0.01 не является целым числом (целым числом), поэтому вы, конечно, не можете его разобрать. Вместо этого используйте Double.parseDouble или Float.parseFloat.

52
ответ дан Druzion 27 August 2018 в 15:13
поделиться

Использовать,

String s="0.01";
int i= new Double(s).intValue();
21
ответ дан adatapost 27 August 2018 в 15:13
поделиться

Использование BigDecimal для округления:

String s1="0.01";
int i1 = new BigDecimal(s1).setScale(0, RoundingMode.HALF_UP).intValueExact();

String s2="0.5";
int i2 = new BigDecimal(s2).setScale(0, RoundingMode.HALF_UP).intValueExact();
3
ответ дан AnnTea 27 August 2018 в 15:13
поделиться

предположим, что мы берем целое число в строке.

String s = "100"; int i = Integer.parseInt (s); или int i = Integer.valueOf (s);

, но в вашем вопросе число, которое вы пытаетесь сделать, - это целое число

String s = "10.00"; / g3]

double d = Double.parseDouble (s);

int i = (int) d;

Таким образом вы получаете ответ от значение, которое вы пытаетесь получить.

3
ответ дан ayushs27 27 August 2018 в 15:13
поделиться

Этот вид преобразования на самом деле невероятно неинтуитивный в Java

Возьмем, например, следующую строку: «100.00»

C: простая стандартная библиотечная функция по крайней мере с 1971 года ( Откуда взялось имя `atoi`? )

int i = atoi(decimalstring);

Java: обязательный проход методом двойного (или Float), за которым следует cast

int i = (int)Double.parseDouble(decimalstring);

У Java наверняка есть некоторые странности в рукаве

9
ответ дан Community 27 August 2018 в 15:13
поделиться
  • 1
    C просто игнорировать остальную часть строки и анализировать все, что она может анализировать (в этом случае это 100). Невозможно узнать, действительно ли atoi разбирал все в строке или нет, содержит ли строка число или число переполняет этот тип. strtol - лучшая альтернатива, где все вещи, описанные выше, могут быть обнаружены. Java более строгая, но она гарантирует, что все эти случаи будут покрыты. – nhahtdh 9 September 2013 в 14:27
  • 2
    Я согласен с Raywell, потому что это работает Double.valueOf("16543").intValue();. Поэтому Java хочет быть PITA, когда вы хотите быстро преобразовать в int, но Double намного более общий. – Someone Somewhere 12 December 2013 в 23:49

использовать этот

int number = (int) Double.parseDouble(s);

2
ответ дан Kevin Tan 27 August 2018 в 15:13
поделиться

Используйте Double.parseDouble(String a) то, что вы ищете, не является целым числом, поскольку оно не является целым числом.

13
ответ дан Mariusz Jamro 27 August 2018 в 15:13
поделиться
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;

Причиной исключения является то, что целое число не содержит рациональных чисел (= в основном дробей). Итак, попытка разобрать 0.3 на int - это вздор. Тип double или float может содержать рациональные числа.

Способ, которым Java передает double в int, выполняется , удаляя часть после десятичного разделителя округлением к нулю .

int i = (int) 0.9999;

i будет нулевым.

71
ответ дан Martijn Courteaux 27 August 2018 в 15:13
поделиться
  • 1
    Ваш бросок полностью потеряет дробную информацию. Я не уверен, что это хорошая идея, чтобы посоветовать. – Joren 20 September 2009 в 14:18
  • 2
    ОК! возможно, мне придется сделать что-то вроде этого Double d = Double.parseDouble (s); правильно? – Kevin Boyd 20 September 2009 в 14:21
  • 3
    @ Joren: Я знаю, но он хочет Integer (если я проверю его код) – Martijn Courteaux 20 September 2009 в 14:22
  • 4
    @Kevin: да, но вы можете использовать также «double» вместо «Double» – Martijn Courteaux 20 September 2009 в 14:22
  • 5
    Он говорит, что хочет целое число, но уверены ли мы, что он нуждается в ? – Joren 20 September 2009 в 14:32
Другие вопросы по тегам:

Похожие вопросы: