如何最好地将给定的字符串格式化为数字?
String number = "1000500000.574" //assume my value will always be a String
我希望将其作为一个字符串,值为:1,000,500,000.57
如何格式化它呢?
如何最好地将给定的字符串格式化为数字?
String number = "1000500000.574" //assume my value will always be a String
我希望将其作为一个字符串,值为:1,000,500,000.57
如何格式化它呢?
DecimalFormat
类;它支持不同的地区设置(例如:在某些国家,该数字将被格式化为1.000.500.000,57
)。double amount = Double.parseDouble(number);
代码示例:
String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");
System.out.println(formatter.format(amount));
如果您需要在一个字符串中格式化多个数字,使用String.format()可能会更容易和/或更灵活。
String number = "1000500000.574";
Double numParsed = Double.parseDouble(number);
System.out.println(String.format("The input number is: %,.2f", numParsed));
// Or
String numString = String.format("%,.2f", numParsed);
对于格式字符串 "%,.2f","," 表示用逗号分隔数字组,".2" 表示在小数点后保留两位。
有关其他格式选项的参考,请参见https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
考虑到这是搜索引擎谷歌上“Java格式化数字加逗号”的排名第一结果,以下答案适用于整数且不关心小数点的用户。
String.format("%,d", 2000000)
输出:
2,000,000
一旦您将String转换为数字,您就可以使用
// format the number for the default locale
NumberFormat.getInstance().format(num)
或者// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
new DecimalFormat("0.##", DecimalFormatSymbols.getInstance(locale))
。 - Jonikpublic static void main(String[])
{
int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
String formatted = ValueFormat.format(1234567, settings);
}
我还应该指出,这个方法不处理小数支持,但对于整数值非常有用。上面的示例将输出“1.23M”。也许我可以添加小数支持,但是我认为没有太多用处,因为那样的话,我可能会将其合并到一个处理压缩char[]数组进行数学计算的BigInteger类型的类中。
K
或者M
是什么意思。 - rishabhmhjnpublic static String getRoundOffValue(double value){
DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
return df.format(value);
}
public void convert(int s)
{
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}
public static void main(String args[])
{
LocalEx n=new LocalEx();
n.convert(10000);
}
String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));
String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result));
output: 10,987,655.88
第一个答案非常好,但是对于 ZERO / 0 它会格式化为 .00
因此,格式 #,##0.00 对我来说很有效。 在部署到生产系统之前,请始终测试不同的数字,例如 0 / 100 / 2334.30 和负数。
DecimalFormat
违反了Javadoc的规定:“通常不要直接调用DecimalFormat构造函数,因为NumberFormat工厂方法可能返回除DecimalFormat之外的子类。” 对我来说似乎是糟糕的设计,但它就是这样。 - jhyot