我正在使用下面的代码来获得我在两个十进制位置创建的方法的答案。但是当我这样做并编译时,我收到一条错误消息,提示需要标识符。2 错误出现一个指向 2 和另一个就在之前。我的问题是什么?
import java.text.NumberFormat;
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
您所展示的内容是正确的,假设这些行并非全部在一起(import
语句必须在任何类之外)。例如,这是有效的:
import java.text.NumberFormat;
class MyClass {
void someMethod() {
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
// ...
}
}
...但是您的问题中显示的那些行不是。
如果不是这样,您说错误似乎集中在2
. 有时当我们在 SO 上看到这样的问题时,这是因为一些零宽度或类似空格的特殊字符意外地出现在源代码中。因此,如果您删除该行并重新键入它,您可能会删除有问题的字符。(实际上出现这种情况的频率令人惊讶。)
您可以编写一个通用函数,如下所示:
public static double round(double inputNumber, int fractionDigits, int roundingMode) {
BigDecimal bigDecimal = new BigDecimal(inputNumber);
BigDecimal rounded = bigDecimal.setScale(fractionDigits, roundingMode);
return rounded.doubleValue();
}
请在下面找到示例测试结果:
import java.math.BigDecimal;
public class RoundHelper {
public static void main(String[] args) {
System.out.println(RoundHelper.round(123.98980, 2, BigDecimal.ROUND_HALF_UP));
System.out.println(RoundHelper.round(123.98000, 2, BigDecimal.ROUND_HALF_UP));
System.out.println(RoundHelper.round(123.98000, 2, BigDecimal.ROUND_HALF_UP));
System.out.println(RoundHelper.round(123.55087, 2, BigDecimal.ROUND_HALF_UP));
System.out.println(RoundHelper.round(123.14000, 2, BigDecimal.ROUND_HALF_UP));
}
public static double round(double inputNumber, int fractionDigits, int roundingMode) {
BigDecimal bigDecimal = new BigDecimal(inputNumber);
BigDecimal rounded = bigDecimal.setScale(fractionDigits, roundingMode);
return rounded.doubleValue();
}
}
输出:
123.99
123.98
123.98
123.55
123.14