РЕДАКТИРОВАТЬ: глупо меня, ссылка была прямо над той, которую я дал.Используйте рендерер, как в примере, приведенном здесь .
Если вы заранее знаете, какие точности потребуются, вы можете настроить контроллер для обработки этих случаев и вставить их в представление.
Всплеск предложил способ, которым это можно сделать.Несколько более общим способом может быть что-то вроде следующего:
class DoublePrecisionGetters {
public double number;
public NumberFormat nf = NumberFormat.getInstance();
public DoublePrecisionGetters(double d)
{ number = d; }
public String getTwoPlaces() {
nf.applyPattern("0.00");
return nf.format(number);
}
public String getThreePlaces() {
nf.applyPattern("0.000");
return nf.format(number);
}
// etc
}
Вы бы настроили ST как:
ST template = new ST("two places: $number.twoPlaces$", '$');
template.setAttribute("number", new DoublePrecisionGetters(3.14159));
Наконец, если вам действительно нужно, чтобы он был полностью универсальным, вы могли бывзломать что-нибудь вместе с адаптерами модели , зарегистрировав ModelAdaptor для обработки удвоений (или чего-либо еще) и убедившись, что он вычисляет точность на основе запрошенного propertyName.