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_Math - Fatal编程技术网

Java 在点后用较大的数字舍入值

Java 在点后用较大的数字舍入值,java,math,Java,Math,我有这个代码,它给出了一个结果 double a = 128.73; double roundOff = Math.round(a*100)/100; System.out.println(roundOff); Result is :- 128.0 我需要的是,如果点后面的值大于5,即(6,7,8或9),那么 应通过在给定值上加1得出结果,该值必须四舍五入,即 128.54应给出128.0的结果 128.23应给出128.0的结果 128.73应给出129.0的结果 128.93应给出129

我有这个代码,它给出了一个结果

double a = 128.73;
double roundOff = Math.round(a*100)/100;
System.out.println(roundOff);
Result is :- 128.0
我需要的是,如果点后面的值大于5,即(6,7,8或9),那么 应通过在给定值上加1得出结果,该值必须四舍五入,即

  • 128.54应给出128.0的结果
  • 128.23应给出128.0的结果
  • 128.73应给出129.0的结果
  • 128.93应给出129.0的结果

试试这个,它正在工作

 double d = 0.51;
 DecimalFormat newFormat = new DecimalFormat("#.");
 double twoDecimal =  Double.valueOf(newFormat.format(d));
“#.”=在小数点后加上#,直到需要四舍五入的地方

  • Math.round(a*100)
    makes
    Math.round(12873)
    results
    12873
  • 第1步
    12873
    的结果是
    long
    键入的值,但不是
    double
  • 因此,当它除以100时,生成一个
    非十进制
    结果
    12873/100=128
  • 现在它以
    128.0
    的形式存储在一个双变量中
  • 你为什么不使用和



    编辑 正如@Alex所注意到的,上面的代码将无法按照您的意愿工作。以下是使用和的另一种方法:

    double n=myDouble-Math.floor(myDouble)//这会给你电话号码
    //小数点后。
    如果(n<0.6){
    myDouble=数学楼层(myDouble);
    }
    否则{
    myDouble=Math.ceil(myDouble);
    }
    
    这适用于您的所有号码:

    BigDecimal.valueOf(128.54).setScale(1, RoundingMode.HALF_UP)
              .setScale(0, RoundingMode.HALF_DOWN)
    

    如果您确实有这样的需求,请使用以下代码

    double value = 128.54;
    double rounded = (((value * 10) + 4) / 10)
    
    四舍五入的值将是
    128.0
    。 如果
    128.64
    ,则结果将为
    129.0

    如果有正常舍入(
    .5
    和更高的舍入),则必须将第二行更改为

    double rounded = (((value * 10) + 5) / 10)
    

    秘密在于常数(
    4
    5
    )必须是
    10
    减去它应该向上取整的值。

    这是一种奇怪的取整方式…@神秘:是的。。。thanx回答…但我需要同样的。@Mystical是的,这很奇怪,至少第一个例子有一个打字错误。这不是由数学自动完成的吗。这是一种循环方式吗?试试数学吧,因为你不需要小数点,所以(a)不需要乘法。它应该向上/向下舍入到下一个整数。@PathFinder:您必须指定第一个示例128.54舍入到128.0是否错误。人们认为这可能是一个错误,因为需要将分数从0向下四舍五入到0.6(排除),而将0.6(排除)向上四舍五入到1(排除),这种情况非常罕见,而且有点不自然。若您打算将128.54四舍五入为129,而不是128,那个么这是一个重复的问题,如标记所示。如果你真的希望它是128,那么这不是一个复制品。它不适用于128。54否则它就没有意义了。根据我在SO的经验,这是一个打字错误。如果您不确定,请保留您的-1:)在关于打字错误的证明之后,我将继续投票,抱歉:)@Alex BTW-“我需要的是,如果点后的值大于5,即(6、7、8或9),那么它应该通过向给定值添加1来给出结果,该值必须四舍五入”。因此,对于该数字(.6、.7、.8或.9),从128.60开始。我把“点后值”理解为1(第一)位数字。
    double n = myDouble - Math.floor(myDouble); //This will give you the number 
                                                //after the decimal point.
    if(n < 0.6) {
         myDouble = Math.floor(myDouble);
    }
    else {
         myDouble = Math.ceil(myDouble);
    }
    
    BigDecimal.valueOf(128.54).setScale(1, RoundingMode.HALF_UP)
              .setScale(0, RoundingMode.HALF_DOWN)
    
    double value = 128.54;
    double rounded = (((value * 10) + 4) / 10)
    
    double rounded = (((value * 10) + 5) / 10)