2013-12-10 3 views
1

Я хочу хранить целое число с именем «Сумма», я хочу, чтобы он хранился в pence, поэтому, если пользователь ввел 11.45, он будет сохранен как 1145. Каков наилучший способ удаления десятичной точки ? Должен ли я использовать decimalFormatting в Java?Удаление десятичной точки в java

Edit:

Он вводится в строчном формате, собирается преобразовывать его в междунар. Я дам одно из ваших решений назад и дам вам знать, работает ли оно, но не уверен, какой из них будет лучшим. Спасибо всем.

+9

умножить его на 100? – Keppil

+0

Является ли пользователь вводимым в виде строки или это некоторый числовой тип. Если последний, какой тип? –

+0

Пожалуйста, дайте нам обратную связь. Какие решения работают/не работают? Какие из них на правильном пути? –

ответ

0

раз на 100 и отливать как int. Использовать десятичное форматирование double/float слишком неточно, что они могут быть за деньги

+0

Не будет работать для всех значений. –

+2

Это работает только в том случае, если справа от точки оснований есть ровно две цифры. –

0

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

String input = "11.45"; 
String stripped = input.replace(".", ""); // becomes "1145" 
int value = Integer.parseInt(stripped); 

Если это float уже, а затем просто умножить на 100 и гипсе, а @ user1281385 предлагает.

+1

И 11.4500 становится 114500, что не хорошо для денег ;-) –

+0

@MartinMajer - OP сказал, что вход был в определенном формате. –

+0

«если пользователь введен в 11.45» не означает, что он не может ввести 11.4500. Я думаю, что хорошим решением является просто умножить его на 100 и применить к int. –

-1

Протестировано и работает. Даже если пользователь вводит номер без десятичной, он сохранит его как таковой.

double x = 11.45; // number inputted 

String s = String.valueOf(x); // String value of the number inputted 
int index = s.indexOf("."); // find where the decimal is located 

int amount = (int)x; // intialize it to be the number inputted, in case its an int 

if (amount != x) // if the number inputted isn't an int (contains decimal) 
    // multiply it by 10^(the number of digits after the decimal place) 
    amount = (int)(x * Math.pow(10,(s.length() - 1 - index))); 

System.out.print(amount); // output is 1145 

// if x was 11.4500, the output is 1145 as well 
// if x was 114500, the output is 114500 
+0

Почему так сложно? –

+0

@MartinMajer Чтобы он работал для всех случаев. Это не сложно. Просто прочитайте комментарии. –

+0

Это сложно, если вы можете просто умножить число на 100, округлить его и преобразовать в int. –

-1

Как насчет преобразования в float, умножить на 100 и затем преобразовать в int?

String pound = "10.45"; // user-entered string 
int pence = (int)Math.round(Float.parseFloat(pound) * 100); 

Это может быть также полезно: Best way to parseDouble with comma as decimal separator?

Смежные вопросы