用于将尾随零限制为1的Java格式说明符
我正在寻找一个格式说明符,将小数点后的尾随零的数量限制为1,但如果它们不是全部零,则截断为2 像这样:用于将尾随零限制为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); }
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它在我的环境中是假的这应该是公认的答案