我的入参是一个String。里面都是数字,或者小数点。我希望我可以去除掉 这个String 小数点后的末尾的0,并四舍五入 最多保留x为。并返回结果的字符串,我用的java
时间: 2024-09-24 17:22:56 浏览: 46
你可以使用Java的`DecimalFormat`类来进行这样的操作。首先,你需要将输入的String转换成`BigDecimal`类型,以便处理小数部分。然后,你可以设置一个格式化模式,去掉末尾的零并指定保留的小数位数。以下是步骤:
```java
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class Main {
public static String removeTrailingZerosAndRound(String str, int precision) {
try {
// 检查输入是否只包含数字和小数点
if (str.matches("\\d*\\.\\d*")) {
// 转换为BigDecimal并设置精度
BigDecimal bd = new BigDecimal(str);
// 创建DecimalFormat实例并设置模式
DecimalFormat df = new DecimalFormat("#." + String.valueOf(precision));
df.setRoundingMode(RoundingMode.HALF_UP); // 四舍五入
// 使用format方法去掉末尾的零并进行四舍五入
return df.format(bd.stripTrailingZeros());
} else {
throw new IllegalArgumentException("Input string must contain only numbers and a decimal point.");
}
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid input format.", e);
}
}
public static void main(String[] args) {
String numStr = "12345.67800";
int precision = 2;
System.out.println(removeTrailingZerosAndRound(numStr, precision)); // 输出 "12345.68"
// 更多测试...
}
}
```
在这个示例中,`removeTrailingZerosAndRound`方法接受一个字符串和一个小数位数作为参数,如果输入合法,它会返回一个格式化的字符串。如果不满足条件(如输入不是纯数字加小数点),则抛出异常。
阅读全文