Method:
- Input: a string which represents an integer or a non-integer value.
- Output: a string which represents the same value multiplied by 100.
Requirements:
- No floating-point unless needed.
- No leading 0s in the part left of the floating-point.
- No trailing 0s in the part right of the floating-point.
I cannot use the Double.parseDouble
method, because it sometimes yields an "ugly" result.
For example:
String.valueOf(Double.parseDouble("0.0071")*100)); // yields 0.7100000000000001
String.valueOf(Double.parseDouble("0.072" )*100)); // yields 7.199999999999999
Here is my code, and I would like to know if there are any cavities in it:
String MultiplyBy100(String number)
{
StringBuilder sb = new StringBuilder();
String[] parts = number.split("\\.");
if (parts.length == 1)
sb.append(parts[0]+"00");
else if (parts[1].length() == 1)
sb.append(parts[0]+parts[1]+"0");
else if (parts[1].length() == 2)
sb.append(parts[0]+parts[1]);
else
sb.append(parts[0]+parts[1].substring(0,2)+"."+parts[1].substring(2));
if (sb.charAt(0) == '-')
{
while (sb.length() > 2 && sb.charAt(1) == '0' && sb.charAt(2) != '.')
sb.deleteCharAt(1);
}
else
{
while (sb.length() > 1 && sb.charAt(0) == '0' && sb.charAt(1) != '.')
sb.deleteCharAt(0);
}
return sb.toString();
}