Я получаю int
с 6-значным значением. Я хочу отобразить его как String
с десятичной точкой (.) В 2 цифры от конца int
. Я хотел использовать, float
но было предложено использовать String
для лучшего вывода на дисплей (а 1234.5
не будет 1234.50
). Поэтому мне нужна функция, которая будет принимать в int
качестве параметра и возвращать правильно отформатированный String
с десятичной точкой 2 цифры от конца.
Сказать:
int j= 123456
Integer.toString(j);
//processing...
//output : 1234.56
String str = Integer.toString(j); //integer or string with white spaces<br/> str = new StringBuffer(str.trim()).insert(str.length()-2, ".").toString();
Ответы:
источник
x = x.substring(0, x.length()-2) + "." + x.substring(x.length()-2);
Как упоминалось в комментариях, StringBuilder , вероятно, является более быстрой реализацией, чем использование StringBuffer . Как упоминалось в документации по Java:
Использование :
Или, если вам нужна синхронизация, используйте StringBuffer с аналогичным использованием:
источник
java.lang.StringIndexOutOfBoundsException
(попытка получить доступ к ссылке, которая не существует).источник
java.math.BigDecimal
как использованиеdouble
может вызвать ошибку округления . Если скорость важнее, чем точностьdouble
, тем лучше.В большинстве случаев использование
StringBuilder
(как уже ответили) является хорошим способом сделать это. Однако, если производительность имеет значение, это может быть хорошей альтернативой.источник
Используя ApacheCommons3 StringUtils, вы также можете сделать
в основном это конкатенация подстрок, но короче, если вы не возражаете против использования библиотек, или уже в зависимости от StringUtils
источник
Вы могли бы использовать
Согласно комментариям, 12345 / 100.0 будет лучше, так же как и использование double вместо float.
источник
double
может быть лучшим выбором. с плавающей точкой с точностью до 6 цифр.Если вы используете систему, в которой float стоит дорого (например, без FPU) или не разрешен (например, в бухгалтерском учете), вы можете использовать что-то вроде этого:
В противном случае DecimalFormat является лучшим решением. (приведенный выше вариант StringBuilder не будет работать с небольшими числами (<100)
источник
Я думаю, что более простое и элегантное решение для вставки строки в определенную позицию - это одна строка:
Например, чтобы вставить отсутствующую
:
строку времени:Что он делает, сопоставляет
position
символы в начале строки, группирует их и заменяет группу на себя ($1
), за которой следуетinsert
строка. Обратите внимание на replaceAll, хотя всегда есть одно вхождение, потому что первый параметр должен быть регулярным выражением.Конечно, он не обладает той же производительностью, что и решение StringBuilder, но я считаю, что краткость и элегантность в виде простого и удобного для чтения однострочного текста (по сравнению с огромным методом) достаточны для того, чтобы сделать его предпочтительным решением в большинстве не производительных систем. -критические сценарии использования.
Примечание. Я решаю общую проблему в заголовке по причинам, связанным с документацией. Конечно, если вы имеете дело с десятичными числами, вам следует использовать уже предложенные решения для конкретных областей.
источник
String.format ("% 0d.% 02d", d / 100, d% 100);
источник
Для котлинских парней;) из принятого ответа (@ MikeThomsen's)
Тест ✅
источник
источник
источник
Попробуй это :
источник