Mise en forme à l'aide de DecimalFormat throws exception - “Impossible de formater Objet donné qu'un certain Nombre”

Cela pourrait ressembler à une répétition de la question mais j'ai essayé dans tous les liens ci-dessous et ne peut pas obtenir une réponse adéquate.

Impossible de formater Objet donné comme un Numéro de zone de liste déroulante

Argument Illégal Exception

Mais je ne reçois pas ce qui est erroné. Voici mon code

DecimalFormat twoDForm = new DecimalFormat("#.##");
double externalmark = 1.86;
double internalmark = 4.0;
System.out.println(String.valueOf((externalmark*3+internalmark*1)/4));
String val = String.valueOf((externalmark*3+internalmark*1)/4);
String wgpa1=twoDForm.format(val); //gives exception
String wgpa2=twoDForm.format((externalmark*3+internalmark*1)/4)); //works fine
System.out.println(wgpa1);

La format méthode prend en argument type Objet, c'est pourquoi je suis passé d'un objet de type String qui donne exception

Exception in thread "main" java.lang.IllegalArgumentException: Ne Peut Pas
format de l'Objet donné qu'un certain Nombre.

Mais quand je fais le double de la valeur comme argument le programme fonctionne très bien. Mais si la méthode est définie avec Object argument de type pourquoi je me fais une exception tout en passant un String et ne pas avoir d'exception en passant double?