我使用下面的代码来获得我创建到两个装饰位置的方法的答案。但是当我这样做和complile我得到一个错误,说标识符预期。 2错误出现在一个指向2和另一个之前。我的问题是什么?获得方法的答案到小数点后两位小数位
import java.text.NumberFormat;
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
我使用下面的代码来获得我创建到两个装饰位置的方法的答案。但是当我这样做和complile我得到一个错误,说标识符预期。 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
。有时当我们在这里看到像这样的问题时,这是因为某些零宽度或类似空间的特殊字符偶然会在源代码中结束。因此,如果您删除该行并重新输入该行,则可能会清除违规字符。 (它实际上是令人惊讶多久,来了。)
我试过这个 – user2140783 2013-03-15 16:58:38
@ user2140783:不知道还有什么要告诉你的。如果我复制上面的代码并将其粘贴到一个'MyClass.java'文件中,它就可以很好地编译。所以你必须有潜在的东西潜藏在你没有看到的东西中(或无意中没有向我们展示)。 – 2013-03-15 17:00:20
如下您可以编写一个通用功能:
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
这不是OP询问的问题的答案,这就是完美有效的代码无法编译的原因。 (这个问题并不十分清楚。) – 2013-03-15 17:08:54
它也行不通。对.01和.99之间的所有值测试结果%0.01,你会得到一个令人讨厌的震动。在90%以上的情况下,它是非零的,并且随着您提高精度而变得更糟。 – EJP 2013-03-16 00:05:07
此代码是否在方法内?这个方法在类中吗? – 2013-03-15 16:49:05
你已经显示的是正确的,假设这些行不在一起('import'语句必须在任何类之外)。 – 2013-03-15 16:49:25
@HunterMcMillen我在方法之外声明它,但在里面使用它。在我的代码中没有主要东西。这可能是问题吗? – user2140783 2013-03-15 16:50:45