Como formatar corretamente números flutuantes para String sem zero desnecessário decima

Um duplo de 64 bits pode representar um número inteiro +/- 2 53 exatament

Dado esse fato, escolhi usar um tipo duplo como um tipo único para todos os meus tipos, já que meu maior número inteiro é sem sinal de 32 bit

Mas agora eu tenho que imprimir esses pseudo números inteiros, mas o problema é que eles também são misturados com dobras reai

Então, como faço para imprimir essas dobras muito bem em Jav

Eu tenteiString.format("%f", value), que está próximo, exceto que recebo muitos zeros à direita para valores pequeno

Aqui está um exemplo de saída de%f

232.00000000
0.18000000000
1237875192.0
4.5800000000
0.00000000
1.23450000

O que eu quero é:

232
0.18
1237875192
4.58
0
1.2345

Certamente eu posso escrever uma função para aparar esses zeros, mas isso é muita perda de desempenho devido à manipulação de String. Posso fazer melhor com outro código de formato?

EDITA

As respostas de Tom E. e Jeremy S. são inaceitáveis, pois ambas arbitrariamente arredondam para duas casas decimais. Por favor, entenda o problema antes de responde

EDIT 2

Observe queString.format(format, args...) é dependente da localidade (veja as respostas abaixo

questionAnswers(22)

yourAnswerToTheQuestion