Ответ 1
int j = 123456;
String x = Integer.toString(j);
x = x.substring(0, 4) + "." + x.substring(4, x.length());
Я получаю int
с 6-значным значением. Я хочу показать его как String
с десятичной точкой (.) На 2 цифры с конца int
. Я хотел использовать float
, но было предложено использовать String
для лучшего вывода на дисплей (вместо 1234.5
будет 1234.50
). Поэтому мне нужна функция, которая примет параметр int
as и вернет правильно отформатированный String
с десятичной точкой 2 цифры с конца.
Скажи:
int j= 123456
Integer.toString(j);
//processing...
//output : 1234.56
int j = 123456;
String x = Integer.toString(j);
x = x.substring(0, 4) + "." + x.substring(4, x.length());
Как упоминалось в комментариях, StringBuilder, вероятно, является более быстрой реализацией, чем использование StringBuffer. Как упоминалось в документации по Java:
Этот класс обеспечивает API, совместимый с StringBuffer, но без гарантии синхронизации. Этот класс предназначен для использования в качестве замены для StringBuffer в тех местах, где строковый буфер использовался одним потоком (как это обычно бывает). Там, где это возможно, рекомендуется использовать этот класс вместо StringBuffer, так как он будет быстрее в большинстве реализаций.
Использование:
String str = Integer.toString(j);
str = new StringBuilder(str).insert(str.length()-2, ".").toString();
Или, если вам нужна синхронизация, используйте StringBuffer с аналогичным использованием:
String str = Integer.toString(j);
str = new StringBuffer(str).insert(str.length()-2, ".").toString();
int yourInteger = 123450;
String s = String.format("%6.2f", yourInteger / 100.0);
System.out.println(s);
В большинстве случаев использование StringBuilder
(как уже было сказано) является хорошим способом сделать это. Однако, если производительность имеет значение, это может быть хорошей альтернативой.
/**
* Insert the 'insert' String at the index 'position' into the 'target' String.
*
* ````
* insertAt("AC", 0, "") -> "AC"
* insertAt("AC", 1, "xxx") -> "AxxxC"
* insertAt("AB", 2, "C") -> "ABC
* ````
*/
public static String insertAt(final String target, final int position, final String insert) {
final int targetLen = target.length();
if (position < 0 || position > targetLen) {
throw new IllegalArgumentException("position=" + position);
}
if (insert.isEmpty()) {
return target;
}
if (position == 0) {
return insert.concat(target);
} else if (position == targetLen) {
return target.concat(insert);
}
final int insertLen = insert.length();
final char[] buffer = new char[targetLen + insertLen];
target.getChars(0, position, buffer, 0);
insert.getChars(0, insertLen, buffer, position);
target.getChars(position, targetLen, buffer, position + insertLen);
return new String(buffer);
}
Вы можете использовать
System.out.printf("%4.2f%n", ((float)12345)/100));
В соответствии с комментариями 12345/100.0 было бы лучше, как и использование double вместо float.
Используя ApacheCommons3 StringUtils, вы также можете сделать
int j = 123456;
String s = Integer.toString(j);
int pos = s.length()-2;
s = StringUtils.overlay(s,".", pos, pos);
это в основном подстрока конкатенации, но короче, если вы не возражаете против использования библиотек, или уже в зависимости от StringUtils
Если вы используете систему, где float стоит дорого (например, нет FPU) или не разрешено (например, в бухгалтерии), вы можете использовать что-то вроде этого:
for (int i = 1; i < 100000; i *= 2) {
String s = "00" + i;
System.out.println(s.substring(Math.min(2, s.length() - 2), s.length() - 2) + "." + s.substring(s.length() - 2));
}
В противном случае DecimalFormat является лучшим решением. (вариант StringBuilder выше не будет работать с небольшими номерами (< 100)
public static void main(String[] args) {
char ch='m';
String str="Hello",k=String.valueOf(ch),b,c;
System.out.println(str);
int index=3;
b=str.substring(0,index-1 );
c=str.substring(index-1,str.length());
str=b+k+c;
}
// Create given String and make with size 30
String str = "Hello How Are You";
// Creating StringBuffer Object for right padding
StringBuffer stringBufferRightPad = new StringBuffer(str);
while (stringBufferRightPad.length() < 30) {
stringBufferRightPad.insert(stringBufferRightPad.length(), "*");
}
System.out.println("after Left padding : " + stringBufferRightPad);
System.out.println("after Left padding : " + stringBufferRightPad.toString());
// Creating StringBuffer Object for right padding
StringBuffer stringBufferLeftPad = new StringBuffer(str);
while (stringBufferLeftPad.length() < 30) {
stringBufferLeftPad.insert(0, "*");
}
System.out.println("after Left padding : " + stringBufferLeftPad);
System.out.println("after Left padding : " + stringBufferLeftPad.toString());
Попробуй это:
public String ConvertMessage(String content_sendout){
//use unicode (004E00650077) need to change to hex (N&#x;0065&#x;0077;) first ;
String resultcontent_sendout = "";
int i = 4;
int lengthwelcomemsg = content_sendout.length()/i;
for(int nadd=0;nadd<lengthwelcomemsg;nadd++){
if(nadd == 0){
resultcontent_sendout = "&#x"+content_sendout.substring(nadd*i, (nadd*i)+i) + ";&#x";
}else if(nadd == lengthwelcomemsg-1){
resultcontent_sendout += content_sendout.substring(nadd*i, (nadd*i)+i) + ";";
}else{
resultcontent_sendout += content_sendout.substring(nadd*i, (nadd*i)+i) + ";&#x";
}
}
return resultcontent_sendout;
}
Я думаю, что более простым и элегантным решением для вставки строки в определенную позицию будет этот однострочный шрифт:
target.replaceAll("^(.{" + position + "})", "$1" + insert);
Например, чтобы вставить отсутствующий :
во время String:
"-0300".replaceAll("^(.{3})", "$1:");
Что он делает, сопоставляет символы position
с начала строки, группы, которые и заменяет собой группу ($1
), за которой следует строка insert
. Обратите внимание на replaceAll, хотя всегда есть одно вхождение, потому что первый параметр должен быть регулярным выражением.
Конечно, он не имеет такой же производительности, как решение StringBuilder, но я считаю, что сжатость и изящество как простой и удобный для чтения однострочный (по сравнению с огромным методом) достаточно, чтобы сделать его предпочтительным решением в большинство случаев, не связанных с критикой производительности.
Примечание. Я решаю общую проблему в названии по причинам документации, конечно, если вы имеете дело с десятичными числами, вы должны использовать уже предложенные для домена решения.