我收到的电话号码格式正确。尽管我已经很长时间收到了这个数字,但我现在的最后3位数字对应一个小数部分,因此我想显示用分组和小数点分隔符格式化的数字。
示例:如果我收到该号码11111111111
,则希望显示为11 111 111.111
我有以下代码:
DecimalFormat formatter = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
formatter.setGroupingUsed(true);
symbols.setDecimalSeparator('.');
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
long valueAsLong = 11111111111L;
double value = (double) valueAsLong / 1000;
System.out.println(formatter.format(valueAsLong));
System.out.println(formatter.format(value));
我想知道是否可以在不使用该强制转换的情况下实现此目标,也就是说,设置一个接收a的格式化程序long
并以所需的方式格式化数字。
没有DecimalFormat不支持此功能,因为它的目的是在不更改其值的情况下将数字格式化为String。
format(longValue / 1000.0)
是最简单的解决方案,但是请注意,它不能长时间使用:
public class Test {
public static void main(String[] args) {
DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getInstance(Locale.US);
char decimalSeparator = decimalFormat.getDecimalFormatSymbols().getDecimalSeparator();
// prints 123.456
System.out.println(decimalFormat.format(123456 / 1000.0));
// 9,223,372,036,854,775,807
System.out.println(decimalFormat.format(Long.MAX_VALUE));
// 9,223,372,036,854,776, not 9,223,372,036,854,776.807, as double's resolution is not sufficient
System.out.println(decimalFormat.format(Long.MAX_VALUE / 1000.0));
// 9,223,372,036,854,775.807
BigInteger[] divAndRem = new BigInteger(Long.toString(Long.MAX_VALUE))
.divideAndRemainder(new BigInteger("1000"));
System.out.println(decimalFormat.format(divAndRem[0])
+ decimalSeparator + divAndRem[1]);
// using String manipulation
String longString = decimalFormat.format(Long.MAX_VALUE);
System.out.println(new StringBuilder(longString).replace(
longString.length() - 4,
longString.length() - 3,
Character.toString(decimalSeparator)));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句