Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将方法的答案精确到小数点后两位_Java_Methods - Fatal编程技术网

Java 将方法的答案精确到小数点后两位

Java 将方法的答案精确到小数点后两位,java,methods,Java,Methods,我正在使用下面的代码来获得我在两个decomal位置创建的方法的答案。但当我这样做和complile,我得到一个错误,说标识符预期。出现2个错误,一个指向2,另一个正好在前面。我有什么问题 import java.text.NumberFormat; NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(2); 您所显示的是正确的,假设这些行不在一起(import语句必须在任何

我正在使用下面的代码来获得我在两个decomal位置创建的方法的答案。但当我这样做和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
上。有时,当我们在这里看到这样的问题时,这是因为一些零宽度或类似空格的特殊字符意外地出现在源代码中。因此,如果您删除该行并重新键入,则可能会删除冒犯的字符。(这种情况出现的频率令人惊讶。)

您可以编写一个通用函数,如下所示:

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

此代码是否在方法中?该方法在类内部吗?您所展示的是正确的,假设行不在一起(
import
语句必须在任何类外部)。@HunterMcMillen我在方法外部声明它,但在内部使用它。我的代码中没有main。这可能是问题所在吗?@user2140783:A
main
仅在类中是通过
java
命令行工具运行的程序的主类时才需要。缺少
main
不会导致预期的
标识符
错误。@user2140783:不知道还能告诉你什么。如果我复制上面的内容并将其粘贴到
MyClass.java
文件中,它就可以编译了。因此,源代码中一定隐藏着一些你看不到的东西(或者无意中没有向我们展示)。这并不是OP提出的问题的答案,这就是为什么完全有效的代码无法编译。(这个问题并不十分清楚。)它也不起作用。对结果%0.01进行测试,以确定所有介于.01和.99之间的值,您将受到严重的冲击。在超过90%的情况下,它是非零的,并且随着精度的提高,它会变得更糟。