Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 修长和重新格式化_Java - Fatal编程技术网

Java 修长和重新格式化

Java 修长和重新格式化,java,Java,我试图弄清楚如何重新格式化从API获得的长值。多头价值代表一只股票的市值,因此它自然会变化,但本质上我希望将其汇总并缩写 我在这里找到了一个代码,可以根据数字的高度将其缩写下来,但我不知道如何保持小数 例如,如果我查询“NFLX”,我会返回“117173403648”。有了代码我就可以得到117B了。我希望输出为“117.17B” 在缩写数字之前,我已经尝试过Math.round()函数,但它似乎没有按照我希望的方式工作,DecimalFormat也没有。我肯定两个都用错了 以下是我在上找到并修

我试图弄清楚如何重新格式化从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。那么它就应该行为不端。不确定。是的,但这只是一个案例的例子,说明了解决这个问题的方法。这不是完整的代码,可能是我太懒了;)