用于将尾随零限制为1的Java格式说明符

用于将尾随零限制为1的Java格式说明符,java,format,Java,Format,我正在寻找一个格式说明符,将小数点后的尾随零的数量限制为1,但如果它们不是全部零,则截断为2 像这样: 127.000000 -> 127.0 0.000000 -> 0.0 123.456 -> 123.45 我试着用逻辑来处理它,但似乎不起作用 调用我的号码result,并使用以下逻辑: if(result - (int)result == 0){ output = String.format("%.1f\n",result); }

我正在寻找一个格式说明符,将小数点后的尾随零的数量限制为1,但如果它们不是全部零,则截断为2

像这样:

127.000000 -> 127.0

0.000000 -> 0.0

123.456 -> 123.45
我试着用逻辑来处理它,但似乎不起作用

调用我的号码
result
,并使用以下逻辑:

    if(result - (int)result == 0){
        output = String.format("%.1f\n",result);
    }
    else{
        output = String.format("%.2f\n,result);
    }
这种逻辑有时有效,有时无效。比如说

(int)result-对于
0.000000

但是对于
127000000


有什么想法吗?

关于
NumberFormat

NumberFormat formatter = NumberFormat.getNumberInstance(Locale.ROOT);
formatter.setMinimumFractionDigits(1);
formatter.setMaximumFractionDigits(2);
String s1 = formatter.format(127.000000);
String s2 = formatter.format(0.000000);
String s3 = formatter.format(123.456);
System.out.println(s1);     //prints 127.0
System.out.println(s2);     //prints 0.0
System.out.println(s3);     //prints 123.46

由于小数点后最多需要两位数字,因此可以先去掉其余数字,然后决定是否保留最后一位数字

    float result = 127.8901f; //0.0000 
    String output = String.format("%.2f", result);
    if (output.endsWith("00")) output = output.substring(0,output.length()-1);

您可以将其转换为字符串并查找
索引

    String n1 = new String("127.000000");
    String output=null;

    if(n1.charAt(n1.indexOf(".")+2)>'0') //after decimal if non-zero at second position
    {
        output= n1.substring(0,n1.indexOf(".")+3);
    }
    else
    {
        output= n1.substring(0,n1.indexOf(".")+2);  
    }

    System.out.println(output);

下面是一个有效的正则表达式:

public class DecimalTest {

private static Pattern PATTERN = Pattern.compile("(\\d+\\.)(0|\\d\\d)");
private static final String[] TEST_VALUES = {"127.000000", "0.0000000", "123.456"};

public static void main(String[] args) {

    for (final String testValue : TEST_VALUES) {
        final Matcher matcher = PATTERN.matcher(testValue);
        if (matcher.find())
            System.out.println(matcher.group(1) + matcher.group(2));
        }
    }
}

您是否考虑过通过字符串操作来实现这一点,即获取一个带有额外尾随零的字符串并将其删除,而不是更改字符串的格式?为什么您要说
int(result)-result==0
对于result=127.00000f给出
false
?它应该是真的。@jrook它在我的环境中是假的这应该是公认的答案