NumberFormatException while converting a string to an integer value in java - java

When I'm trying to parse the input1 string to an integer value it's rising a NumberFormatException.I've tried replacing the spaces if any in the string but it didn't work for me.
int number = 0;
String input1 = "12345354987";
try{
ip = Integer.parseInt(input1);
}catch(NumberFormatException e){
System.out.println("not a number");
}

Its because the Number in String is out of Integer range, If you really need this than use BigInteger for large values like this :
String input1 = "12345354";
BigInteger ib =new BigInteger(input1);
System.out.println(ib);
or
For small values that can fit in Long range you can use :
String input1 = "1234535455";
Long ip = Long.parseLong(input1);
System.out.println(ip);

12345354987 > 2,147,483,64
Integer max range is 2,147,483,647 and you are crossing it. You may use Long or BigDecimal for big numbers.

Your number is greater then integer Max value please use long then try parsing.

Related

converting float to integer in a special way

I am trying to convert float number in Java to integer on the following way:
4.55 = 455
12.45 = 1245
11.1234 = 111234
How can I do it?
One option would be like this:
float number = 4.55f;
int desiredNumber = Integer.parseInt(String.valueOf(number).replaceAll("\\.", ""));
But something like this will only work if the conversion pattern will stay the same. By this I mean the way you want to convert from float to int. Hope this helps.
here is an example
double f1 = 4.5;
String str = new Double(f1).toString();
str = str.replace(".", "");
Integer i = Integer.parseInt(str);
System.out.println(i);
If you want to be able to hanlde arbitrarily large numbers and arbitrarily many decimals, then you can use BigDecimal and BigInteger
BigDecimal number = new BigDecimal(
"5464894984546489498454648949845464894984546489498454648949845464894984546489498454648949845464894984.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
String valueOf = number.toPlainString();
BigInteger desired = new BigInteger((valueOf.replaceAll("\\.", "")));
System.out.println(desired);
Constructor can take double or float if needed
BigDecimal number = new BigDecimal(Double.MAX_VALUE);
BigDecimal number = new BigDecimal(Float.MAX_VALUE);
Something like that :
public int convert( float numbre) {
String nmbre = String.valueOf(numbre).replace(".", "");
return Integer.parseInt(nmbre );
}
You can convert the number to a String, remove the dot, and create a new Long:
private long removeTheDot(Number number) {
return Long.valueOf(number.toString().replace(".", ""));
}
Ka-Bam!

How to convert a String number to two three decimal places in Java?

I am trying to convert a String number to two decimal places in Java. I saw lot of posts on satckoverflow but somehow I am getting an exception.
String number = "1.9040409535344458";
String result = String.format("%.2f", number);
System.out.println(result);
This is the exception I am getting -
java.util.IllegalFormatConversionException: f != java.lang.String
I would like to have 1.904 as the output. Does anyone know what wrong I am doing here?
You can try using a NumberFormat. For example:
String number = "1.9040409535344458";
NumberFormat formatter = new DecimalFormat("#0.000");
String result = formatter.format(Double.valueOf(number));
System.out.println(result);
Just declare number to be double :
Double number = 1.9040409535344458;
instead of
String number = "1.9040409535344458";
OUTPUT :
1.90
you should first convert the string into double and then change the decimal value
String number = "1.9040409535344458";
double result = Double.parseDouble(number);//converts the string into double
result = result *100;//adjust the decimal value
System.out.println(result);
You are using a format not meant for a String. I would recommend either converting your String to a double or storing it as a double in the first place. Convert the String to a double, and pass that double to String.format.

NumberFormatException resulting from java conversion

The goal is to convert a String to int in java.
My declarations:
String [] dataIn = new String[100];
int [] binVals = new int[100];
int i;
String toBinary;
I first convert a hex string to a binary string.
static String hexToBin(String s) {
return new BigInteger(s,16).toString(2);
}
.....
.....
toBinary = hexToBin(dataIn[i]);
try{
int temp = Integer.parseInt(toBinary);
binVals[i] = temp;
System.out.println(temp);
} catch (NumberFormatException ex){
System.out.println("Not gonna work");
}
toBinary is a String value of 32 bits i.e. 00011100...01
I printed the result to the console to make sure it is valid for an integer conversion. Yet, using Integer.parseInt(toBinary); still throws the exception. What am I missing here?
Updated
According to what you guys said, I now no longer receive an exception, but when I convert the binary String into an integer, it seems to become a decimal integer.
if (i % 2 == 0)
{
toBinary = hexToBin(dataIn[i]);
System.out.println("Binary in String: " + toBinary);
try{
int temp = Integer.parseInt(toBinary, 2);
binVals[i] = temp;
System.out.println("binVals[i] in int" + binVals[i]);
} catch (NumberFormatException ex){
System.out.println("Not gonna work");
}
//System.out.println(temp);
} else {
System.out.println("This should be a timestamp: " + dataIn[i]);
}
Output:
Binary in String: 1001010101010101010101010100000
binVals[i] in int1252698784
This should be a timestamp: 2068a40
The problem is that Integer.parseInt without a radix will interpret the string as a decimal number, not binary. Most such "binary" strings will represent numbers that are over the maximum integer possible, a little over 2 billion, e.g. 111,000,101,010,001.
Pass in a radix of 2 (binary) to Integer.parseInt:
int temp = Integer.parseInt(toBinary, 2);
However, if the first "bit" is set, then the represented number will be over Integer.MAX_VALUE, and then only Long.parseLong will work.
Try Integer.parseInt(toBinary, 2);. the 2 specifies that the string is in binary (base 2)
Edit: for your new issue, the problem is that Java will by default print integers as decimal, so you need to turn your (decimal) integer back into a binary string. You can use Integer.toBinaryString(int i) for this.
For parsing and formatting integers you should consider using BigInteger.
Converting to String in any radix use BigInteger.toString(int radix).
For parsing use new BigInteger(String s, int radix).

Extract numbers from a JFormattedTextField

I have made a JFormattedTextField that is formatted to only take numbers:
Number num;
JFormattedTextField Length = new JFormattedTextField(num);
Now I want to get the number out of that and multiply it by 23. I know you can do:
String LengthStr = Length.getText();
int LengthInt = Integer.parseInt(LengthStr);
int Total = LengthInt*23;
But Isn't there an easier way? I've tried:
int LengthInt = Length.getText();
int Total = LengthInt * 23;
because it should be a number already.
The above didn't work because it says
Required: int Found: String
What I 'm asking for is that if the JFormattedTextField is formatted to be an int, then surely I can do something like
int LengthInt = Length.getInt();
int Total = LengthInt *23;
No, you can't. The line: int LengthInt = Length.getText(); tries to put a String Object (Length.getText()) into an primitive tipe (int).
There is no implicit conversion from String to integer in Java, because a String can contain anything (like "abc", for example) that is not directly convertible to a number.
Also, the first two lines should be changed to this: JFormattedTextField Length = new JFormattedTextField(NumberFormat.getIntegerInstance()); Instantiate the JFormattedTextField with the NumberFormat instead of Number.

How can I get an integer from a string in Java?

I am using the following:
int i = Integer.parseInt(args[2]);
Are there any other ways to get an integer from a string? If the number is really small as it is then doe the Byte and Char objects provide something similar?
Yes. There's:
Byte.parseByte(s); -- parses a Byte from a String
Short.parseShort(s); -- parses a Short from a String
And for larger numbers there's:
Long.parseLong(s);
-- Float is an imprecise representation of a floating point number using 32 bits
Float.parseFloat(s);
-- Double is an imprecise representation of a floating point number using 64 bits
Double.parseDouble(s);
-- BigIntegers is an integer of arbitrary size as is accurate
new BigInteger(s);
-- BigDecimal is a floating point number of arbitrary size as is accurate
new BigDecimal(s);
Yes, you can use the Short.parseShort(String) and Byte.parseByte(String) wrapper methods to parse smaller integer values.
Other ways to get an integer from a String:
String value = "2";
int i = Integer.valueOf(value);
System.out.println("i = " + i);
Scanner scanner = new Scanner(value);
i = scanner.nextInt();
System.out.println("i = " + i);
You also should wrap that in a try catch block so your code will not blow up if you try to pass it a non-integer value.

Categories