双精度浮点数转字符串格式化

3
我有一个Double类型的数值xx.yyy,我想把它转换成字符串"xxyyy"或者如果这个数是负数,转换成"-xxyy"。
请问如何实现?
谢谢。
2个回答

8
double yourDouble = 61.9155;
String str = String.valueOf(yourDouble).replace(".", "");

解释:

更新:

原帖增加了一些额外条件(但我不知道具体是哪些):

  • negative number -> only two decimals.

    public static String doubleToSpecialString(double d)
    {
        if (d >= 0)
        {
             return String.valueOf(d).replace(".", "");
        } else
        {
             return String.format("%.2f", d).replace(",", "");
        }
    }
    
  • negative number -> one decimal less

    public static String doubleToSpecialString(double d)
    {
        if (d >= 0)
        {
             return String.valueOf(d).replace(".", "");
        } else
        {
             String str = String.valueOf(d);
             int dotIndex = str.indexOf(".");
             int decimals = str.length() - dotIndex - 1;
             return String.format("%." + (decimals - 1) + "f", d).replace(",", "");
        }
    }
    

1
不适用于负数。根据问题,xx.yyy需要变成-xxyy。 - dogbane
但如果值为负数(-26.301),我将得到一个5个字符长度加上符号(“-26301”),而我只需要4个字符加上符号(“-2630”)。 - mtz
@MatthieuF: 在Java的toString中,它总是".",我想。或者你可以以某种方式更改它吗? - Martijn Courteaux
请注意,此解决方案执行四舍五入,例如-26.367变为-26.37。不确定是否需要这样做? - dogbane
另外,你返回的是“void”而不是“String”。 - dogbane
显示剩余4条评论

3

这篇答案使用了十进制格式化程序。它假设输入的数字始终严格符合 (-)xx.yyy 的形式。

/**
 * Converts a double of the form xx.yyy to xxyyy and -xx.yyy to -xxyy. 
 * No rounding is performed.
 * 
 * @param number The double to format
 * @return The formatted number string
 */
public static String format(double number){
    DecimalFormat formatter = new DecimalFormat("#");
    formatter.setRoundingMode(RoundingMode.DOWN);
    number *= number < 0.0 ? 100 : 1000;
    String result = formatter.format(number);
    return result;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接