我想在客户端显示字符串1,000,其中acutall值为int x = 1000为整数 我怎么能这样做?
我试图通过生成新课来做到这一点 myTextFiels
@Override
public <C> IConverter<C> getConverter(Class<C> type) {
IConverter<C> converter = super.getConverter(type);
if (converter instanceof AbstractDecimalConverter<?>) {
((AbstractDecimalConverter<?>) converter).getNumberFormat(getLocale()).setGroupingUsed(true);
} else {
((AbstractIntegerConverter<?>) converter).getNumberFormat(getLocale()).setGroupingUsed(true);
}
return converter;
}
但这似乎不起作用,我缺少什么
答案 0 :(得分:1)
当您在转换器上执行getNumberFormat()
时,它不会返回对转换器将使用的NumberFormat
实例的引用,而是返回实例的克隆:
@Override
public NumberFormat getNumberFormat(final Locale locale)
{
NumberFormat numberFormat = numberFormats.get(locale);
if (numberFormat == null)
{
numberFormat = newNumberFormat(locale);
setNumberFormat(locale, numberFormat);
}
return (NumberFormat)numberFormat.clone();
}
这是直接从AbstractDecimalConverter
的代码中获取的。因此,要在代码中实现您想要的功能,请执行以下操作:
AbstractDecimalConverter castConverter = (AbstractDecimalConverter<?>) converter;
NumberFormat newNumberFormatForLocale = castConverter.getNumberFormat(getLocale());
newNumberFormatForLocale.setGroupingUsed(true);
castConverter.setNumberFormat(getLocale(), newNumberFormatForLocale);
然而当你这样做时,你需要了解一些事情:使用super.getConverter
的全局转换器定位器检索从Application
获得的转换器。默认情况下,转换器定位器包含每种类型的单例转换器。
这意味着如果您以某种方式在某个页面的某个位置更改此格式,那么该区域设置的所有其他页面也将使用该格式。我可以想象这可能是可以的,但如果不是,那么不是改变你从NumberFormat
检索的转换器上的super.getConverter()
我会创建{{1}的新实例在AbstractDecimalConverter
方法中设置了所需的getConverter
并返回该值,在这种情况下,全局单例保持不变。
如果您想要任何详细说明,请回复。
答案 1 :(得分:0)
也许不是最漂亮的解决方案,但这里有一些解决它的代码
public static String numberformatter(int n){
String number = "";
int leftpart = n / 1000;
int rightpart = n - (leftpart * 1000);
number = rightpart + number;
while(leftpart > 0){
int old = leftpart;
leftpart = old / 1000;
rightpart = old - (leftpart * 1000);
number = rightpart + "," + number;
}
return number;
}