Internet Explorer является единственным браузером, который действительно страдает от этого в современном мире. (Версии 5, 6, и 7 были медленной собакой. 8 не показывает ту же неисправность.), Кроме того, IE становится медленнее и медленнее, дольше Ваша строка.
, Если у Вас есть длинные строки для конкатенации тогда определенно, используют array.join технику. (Или некоторая обертка StringBuffer вокруг этого, для удобочитаемости.), Но если Ваши строки коротки, не беспокоятся.
Немного измените шаблон, чтобы жестко запрограммировать последний ноль:
double finalPrice = 2.46;
DecimalFormat fmt = new DecimalFormat("0.0'0'");
System.out.println("£" + fmt.format(finalPrice) + " Approx");
Теперь, если вы манипулируете реальными деньгами, вам лучше не использовать double, а int или BigInteger .
Вместо этого используйте BigDecimal
.
Вы действительно, действительно не хотите использовать двоичную плавающую точку для денежных значений.
РЕДАКТИРОВАТЬ: round ()
не позволяет указывать десятичные разряды, только значащие цифры. Вот несколько неудобный метод, но он работает (в основном, если вы хотите усечь):
import java.math.*;
public class Test
{
public static void main(String[] args)
{
BigDecimal bd = new BigDecimal("20.44");
bd = bd.movePointRight(1);
BigInteger floor = bd.toBigInteger();
bd = new BigDecimal(floor).movePointLeft(1);
System.out.println(bd);
}
}
Я хотел бы надеяться, что есть более простой способ сделать это ...
ИЗМЕНИТЬ
Попробуйте следующее:
double d = 25.642;
String s = String.format("£ %.2f", Double.parseDouble(String.format("%.1f", d).replace(',', '.')));
System.out.println(s);
Я знаю, что это глупый способ, но он работает.
Это выводит 2.40
BigDecimal bd = new BigDecimal(2.44);
System.out.println(bd.setScale(1,RoundingMode.HALF_UP).setScale(2));