The methods you have used do not return 1.08595E8, instead, they return the number and what you are complaining about is the representation of that number in the console (or as a String).
However, you can specify how to output a doubleyourself with a specified formatting, see this example:
public static void main(String[] args) {
    String value = "108595000.5";
    // use a BigDecimal to parse the value
    BigDecimal bd = new BigDecimal(value);
    // choose your desired output:
    // either the String representation of a double (undesired)
    System.out.println("double:\t\t\t\t\t" + bd.doubleValue());
    // or an engineering String
    System.out.println("engineering:\t\t\t\t" + bd.toEngineeringString());
    // or a plain String (might look equal to the engineering String)
    System.out.println("plain:\t\t\t\t\t" + bd.toPlainString());
    // or you specify an amount of decimals plus a rounding mode yourself
    System.out.println("rounded with fix decimal places:\t" 
                        + bd.setScale(2, BigDecimal.ROUND_HALF_UP));
}
double:                             1.085950005E8
engineering:                        108595000.5
plain:                              108595000.5
rounded with fix decimal places:    108595000.50