Код Java такий:
String s = "0.01";
int i = Integer.parseInt(s);
Однак це викидання NumberFormatException ... Що може піти не так?
Код Java такий:
String s = "0.01";
int i = Integer.parseInt(s);
Однак це викидання NumberFormatException ... Що може піти не так?
Відповіді:
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
Причиною винятку є те, що ціле число не містить раціональних чисел (= в основному дроби). Отже, намагатися проаналізувати 0.3int - це нісенітниця. A doubleабо floatтип даних може містити раціональні числа.
Шлях Java кидає doubleАнь intздійснюється видалення частини після десяткового роздільника округлення до нуля .
int i = (int) 0.9999;
i буде нульовим.
Цей тип перетворення насправді незвично неінтуїтивний у Java
Візьмемо для прикладу такий рядок: "100,00"
C: проста стандартна функція бібліотеки принаймні з 1971 р. ( Звідки пішла назва `atoi`? )
int i = atoi(decimalstring);
Java: обов’язковий прохід шляхом синтаксичного аналізу Double (або Float), за яким слідує кидок
int i = (int)Double.parseDouble(decimalstring);
Напевно, у Java є деякі дивацтва
100). Ви не можете дізнатись, чи atoiпроаналізовано насправді все у рядку чи ні, чи містить рядок число чи число переповнює тип. strtolє кращою альтернативою, де можна виявити все вищезазначене. Java є жорсткішою, але вона гарантує, що всі ці випадки охоплені.
Double.valueOf("16543").intValue();Отже, Java хоче бути PITA, коли ви хочете швидко перетворити на int, але Double є набагато загальнішим.
припустимо, ми беремо ціле число в рядку.
Рядок s = "100"; int i = Integer.parseInt (s); або int i = Integer.valueOf (s);
але у вашому питанні число, яке ви намагаєтесь змінити, це ціле число
Рядок s = "10.00";
double d = Double.parseDouble (s);
int i = (int) d;
Таким чином ви отримуєте відповідь на значення, яке ви намагаєтесь отримати.