Java 修长和重新格式化
我试图弄清楚如何重新格式化从API获得的长值。多头价值代表一只股票的市值,因此它自然会变化,但本质上我希望将其汇总并缩写 我在这里找到了一个代码,可以根据数字的高度将其缩写下来,但我不知道如何保持小数 例如,如果我查询“NFLX”,我会返回“117173403648”。有了代码我就可以得到117B了。我希望输出为“117.17B” 在缩写数字之前,我已经尝试过Math.round()函数,但它似乎没有按照我希望的方式工作,DecimalFormat也没有。我肯定两个都用错了 以下是我在上找到并修改的代码:Java 修长和重新格式化,java,Java,我试图弄清楚如何重新格式化从API获得的长值。多头价值代表一只股票的市值,因此它自然会变化,但本质上我希望将其汇总并缩写 我在这里找到了一个代码,可以根据数字的高度将其缩写下来,但我不知道如何保持小数 例如,如果我查询“NFLX”,我会返回“117173403648”。有了代码我就可以得到117B了。我希望输出为“117.17B” 在缩写数字之前,我已经尝试过Math.round()函数,但它似乎没有按照我希望的方式工作,DecimalFormat也没有。我肯定两个都用错了 以下是我在上找到并修
public static String abbreviateNumber(long marketCap) {
long temp = marketCap / 1000000000;
if (temp > 0) {
return temp + "B";
}
temp = marketCap / 1000000;
if (temp > 0) {
return temp + "M";
}
temp = marketCap / 1000;
if (temp > 0) {
return temp + "K";
}
return String.valueOf(marketCap);
}
使用这个方法,marketCap的输出是117B,但我希望有2个小数,并且仍然保留这个缩写方法
谢谢,非常感谢您的帮助。我是编程新手,一开始就把它弄明白。您应该使用
java.text
包中的DecimalFormat
类
您的代码如下所示:
public static String abbreviateNumber(long marketCap) {
double temp = marketCap / 1000000000;
DecimalFormat f = new DecimalFormat("##.##");
if (temp > 0) {
return f.format(marketCap / 1000000000d) + "B";
}
temp = marketCap / 1000000;
if (temp > 0) {
return f.format(marketCap / 1000000d) + "M";
}
temp = marketCap / 1000;
if (temp > 0) {
return f.format(marketCap / 1000d) + "K";
}
return String.valueOf(marketCap);
}
public static String abbreviateNumber(long marketCap) {
int len = String.valueOf(marketCap).length();
return len > 9 ? String.format("%.2f", marketCap/Math.pow(10, 9))+"B" :
len > 6 ? String.format("%.2f", marketCap/Math.pow(10, 6))+"M" :
len > 3 ? String.format("%.2f", marketCap/Math.pow(10, 3))+"K" :
String.valueOf(marketCap);
}
注意
非最佳清洁解决方案。刚刚更新了工作一的答案。您应该使用
java.text
包中的DecimalFormat
类
您的代码如下所示:
public static String abbreviateNumber(long marketCap) {
double temp = marketCap / 1000000000;
DecimalFormat f = new DecimalFormat("##.##");
if (temp > 0) {
return f.format(marketCap / 1000000000d) + "B";
}
temp = marketCap / 1000000;
if (temp > 0) {
return f.format(marketCap / 1000000d) + "M";
}
temp = marketCap / 1000;
if (temp > 0) {
return f.format(marketCap / 1000d) + "K";
}
return String.valueOf(marketCap);
}
public static String abbreviateNumber(long marketCap) {
int len = String.valueOf(marketCap).length();
return len > 9 ? String.format("%.2f", marketCap/Math.pow(10, 9))+"B" :
len > 6 ? String.format("%.2f", marketCap/Math.pow(10, 6))+"M" :
len > 3 ? String.format("%.2f", marketCap/Math.pow(10, 3))+"K" :
String.valueOf(marketCap);
}
注意
非最佳清洁解决方案。刚刚将答案更新为工作答案。使用DecimalFormat和
double
DecimalFormat format = new DecimalFormat("#0.00B");
long marketCap = 117173403648L;
double value = marketCap / 1000000000.0;
System.out.println(format.format(value));
117.17B
使用十进制和
double
DecimalFormat format = new DecimalFormat("#0.00B");
long marketCap = 117173403648L;
double value = marketCap / 1000000000.0;
System.out.println(format.format(value));
117.17B
只需对发生除法的代码稍作更改,就可以实现小数保留。除此之外,
String.format(“%.2f”,输入)
可用于十进制剪辑
public static String abbreviateNumber(long marketCap) {
//for billion -1000 million above
double temp = ((double)(marketCap / 1000000000.0));
if (temp > 1) {
return String.format("%.2f", temp) + "B";
}
//for million formatting
temp = ((double)(marketCap / 1000000.0));
if (temp > 1) {
return String.format("%.2f", temp) + "M";
}
//for thousands formatting
//if K representation only when it reaches at least 1K make temp > 1
temp = ((double)(marketCap / 1000.0));
if (temp > 0) {
return String.format("%.2f", temp) + "K";
}
//this will not be reached unless a negative number
return String.valueOf(marketCap);
}
对于作为输入的“117173403648l”:
117.17B
只要对发生除法的代码稍作更改,就可以保留小数。除此之外,String.format(“%.2f”,输入)
可用于十进制剪辑
public static String abbreviateNumber(long marketCap) {
//for billion -1000 million above
double temp = ((double)(marketCap / 1000000000.0));
if (temp > 1) {
return String.format("%.2f", temp) + "B";
}
//for million formatting
temp = ((double)(marketCap / 1000000.0));
if (temp > 1) {
return String.format("%.2f", temp) + "M";
}
//for thousands formatting
//if K representation only when it reaches at least 1K make temp > 1
temp = ((double)(marketCap / 1000.0));
if (temp > 0) {
return String.format("%.2f", temp) + "K";
}
//this will not be reached unless a negative number
return String.valueOf(marketCap);
}
对于作为输入的“117173403648l”:
117.17B
像这样的东西怎么样:
public static String abbreviateNumber(long marketCap) {
double temp = marketCap / 1000000000;
DecimalFormat f = new DecimalFormat("##.##");
if (temp > 0) {
return f.format(marketCap / 1000000000d) + "B";
}
temp = marketCap / 1000000;
if (temp > 0) {
return f.format(marketCap / 1000000d) + "M";
}
temp = marketCap / 1000;
if (temp > 0) {
return f.format(marketCap / 1000d) + "K";
}
return String.valueOf(marketCap);
}
public static String abbreviateNumber(long marketCap) {
int len = String.valueOf(marketCap).length();
return len > 9 ? String.format("%.2f", marketCap/Math.pow(10, 9))+"B" :
len > 6 ? String.format("%.2f", marketCap/Math.pow(10, 6))+"M" :
len > 3 ? String.format("%.2f", marketCap/Math.pow(10, 3))+"K" :
String.valueOf(marketCap);
}
像这样的怎么样:
public static String abbreviateNumber(long marketCap) {
double temp = marketCap / 1000000000;
DecimalFormat f = new DecimalFormat("##.##");
if (temp > 0) {
return f.format(marketCap / 1000000000d) + "B";
}
temp = marketCap / 1000000;
if (temp > 0) {
return f.format(marketCap / 1000000d) + "M";
}
temp = marketCap / 1000;
if (temp > 0) {
return f.format(marketCap / 1000d) + "K";
}
return String.valueOf(marketCap);
}
public static String abbreviateNumber(long marketCap) {
int len = String.valueOf(marketCap).length();
return len > 9 ? String.format("%.2f", marketCap/Math.pow(10, 9))+"B" :
len > 6 ? String.format("%.2f", marketCap/Math.pow(10, 6))+"M" :
len > 3 ? String.format("%.2f", marketCap/Math.pow(10, 3))+"K" :
String.valueOf(marketCap);
}
为什么不使用Double作为除法结果的类型,并看看如何使用数字格式化程序?尝试使用
BigDecimal
。我无法通过“保留小数”使缩写代码适用于与BigDecimal相关的问题,我通常不得不假设您的意思是“保留小数位”,因为很多人似乎用“十进制”来表示点或小数,但是long
没有任何小数点。为什么不使用Double作为除法结果的类型,并看看如何使用数字格式化程序?尝试使用BigDecimal
。我无法通过“保留小数”来获得与BigDecimal相关的问题的缩写代码。我通常不得不假设您的意思是“保留小数点”,因为很多人似乎用“Decimal”来表示点或小数,但是long
没有任何小数位数。只要市值达到数十亿美元,它就会起作用。如果像这样的长时间是数百万:4857729,回报将是0,000亿。。正确的。。同样的事情也应该发生在@Joakim Danielson answer。。因为它只是指向“B”缩写。只有如果相同的逻辑适用于其他abbrv。那么它也应该断了。不确定。将更新我的答案。回答了我的问题,正如Alexey所指出的。谢谢你的尝试,非常感谢。只要你的市值达到数十亿美元,它就行。如果像这样的长时间是数百万:4857729,回报将是0,000亿。。正确的。。同样的事情也应该发生在@Joakim Danielson answer。。因为它只是指向“B”缩写。只有如果相同的逻辑适用于其他abbrv。那么它也应该断了。不确定。将更新我的答案。回答了我的问题,正如Alexey所指出的。谢谢你的尝试,非常感谢。同样的事情在这里,它一直有效,直到长低于十亿,然后你得到0,00@MickDostie是的,因为那些>0
总是以十亿的格式!更新了代码,看看这是否是你所需要的。同样的事情在这里,它会一直工作,直到long跌破十亿大关,然后你得到0,00@MickDostie是的,因为那些>0
总是以十亿的格式!更新代码,看看这是否是您所需要的。如果相同的逻辑适用于其他abbrv。那么它就应该行为不端。不确定。是的,但这只是一个案例的例子,说明了解决这个问题的方法。这不是完整的代码,可能是我太懒了;)如果相同的逻辑适用于其他abbrv。那么它就应该行为不端。不确定。是的,但这只是一个案例的例子,说明了解决这个问题的方法。这不是完整的代码,可能是我太懒了;)