Java Agroup编号格式2745至“2.7”k

Java Agroup编号格式2745至“2.7”k,java,android,numbers,Java,Android,Numbers,我想转换数字,例如:2745到2.7 我有一个双精度的数字,可以是1或10000000 我想用数字1000来做这件事。 我能做什么 数字大于1000是否意味着数字大于1000?我能做什么?是的,我的意思是大于1000。该解决方案在数字小于1.000.000时有效,但例如2756564返回:2.8kk我如何修复?是否相同:|187564663返回187.5kkReally,预期的结果是这样的:当超过1000,k和超过百万m时,返回187.5M,但从不重复字母。我们能做到吗?顺便说一句,非常感谢。我

我想转换数字,例如:2745到2.7 我有一个双精度的数字,可以是1或10000000

我想用数字1000来做这件事。
我能做什么

数字大于1000是否意味着数字大于1000?我能做什么?是的,我的意思是大于1000。该解决方案在数字小于1.000.000时有效,但例如2756564返回:2.8kk我如何修复?是否相同:|187564663返回187.5kkReally,预期的结果是这样的:当超过1000,k和超过百万m时,返回187.5M,但从不重复字母。我们能做到吗?顺便说一句,非常感谢。我添加了另一种方法,不确定我是否理解正确
private static String rounding(int i) {
    if (i < 1000 && i > -1000) return Integer.toString(i);
    final DecimalFormat df = new DecimalFormat("#.#");
    final DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    df.setDecimalFormatSymbols(symbols);
    df.setRoundingMode(RoundingMode.DOWN);
    String prefix = "-";
    if (i < 0) i = -i;
    else prefix = "";
    if (i < 1000000) return prefix + df.format((double) i / 1000) + "k";
    else if (i < 1000000000) return prefix + df.format((double) i / 1000000) + "M";
    else return prefix + df.format((double) i / 1000000000) + "G";
}


private static String roundToKilos(int i) {
    if (i < 1000 && i > -1000) return Integer.toString(i);
    final DecimalFormat df = new DecimalFormat("#.#");
    final DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    df.setDecimalFormatSymbols(symbols);
    df.setRoundingMode(RoundingMode.DOWN);
    final StringBuilder sb = new StringBuilder();
    final boolean negative = i < 0;
    if (negative) i = -i;
    int divider = 1000;
    double d = 0;
    while (i / divider >= 1) {
        d = (double) i / divider;
        divider *= 1000;
        sb.append("k");
    }
    sb.insert(0, df.format(d));
    if (negative) sb.insert(0, "-");
    return sb.toString();
}