Вопрос

Я хотел бы преобразовать double в String. Анкет Я хочу, чтобы у него было как можно меньше цифр и максимально 6.

Итак, я нашел String.format("%.6f", d) который преобразует мой 100.0 в 100.000000Анкет Max Precision работает правильно, но я бы хотел, чтобы это было преобразовано в 100 (минимальная точность). У вас есть идеи, какой метод работает так?

Это было полезно?

Решение

Использовать DecimalFormat: new DecimalFormat("#.0#####").format(d).

Это будет производить числа с от 1 до 6 десятичных цифр.

С DecimalFormat Будет использовать символы локали по умолчанию, вы, возможно, захотите предоставить какие символы использовать:

//Format using english symbols, e.g. 100.0 instead of 100,0
new DecimalFormat("#.0#####", DecimalFormatSymbols.getInstance( Locale.ENGLISH )).format(d)

Чтобы отформатировать от 100,0 до 100, используйте строку формата #.######.

Обратите внимание, что DecimalFormat по умолчанию будет округлить, например, если вы пройдете 0.9999999 Вы получите выход 1. Анкет Если вы хотите получить 0.999999 Вместо этого предоставьте другой режим округления:

DecimalFormat formatter = new DecimalFormat("#.######", DecimalFormatSymbols.getInstance( Locale.ENGLISH ));
formatter.setRoundingMode( RoundingMode.DOWN );
String s = formatter.format(d);

Другие советы

Это дешевый взлом, который работает (и не вводит никаких проблем с округлением):

String string = String.format("%.6f", d).replaceAll("(\\.\\d+?)0*$", "$1");

String.format("%.0", d) не даст вам десятичных десятичных мест

-или же-

String.format("%d", (int)Math.round(f))

Не могли бы вы просто сделать setPrecision функция, вроде как это

private static String setPrecision(double amt, int precision){
   return String.format("%." + precision + "f", amt);
}

Тогда, конечно, назвать это

setPrecision(variable, 2); //

Очевидно, вы можете поднять его для округления или того, что вам нужно сделать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top