总是圆了一双

spa*_*ama 25 java rounding

我怎么能总是围绕double一个int,而不是四舍五入.我知道Math.round(double),但我希望它总是圆润.如果是的话3.2,它会四舍五入到4.

tab*_*100 36

你可以使用Math.ceil()方法.

请参阅JavaDoc链接:https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil(double )

来自文档:

小区

public static double ceil(double a)
Run Code Online (Sandbox Code Playgroud)

返回大于或等于参数且等于数学整数的最小(最接近负无穷大)double值.特别案例:

  • 如果参数值已经等于数学整数,则结果与参数相同.
  • 如果参数为NaN或无穷大或正零或负零,则结果与参数相同.
  • 如果参数值小于零但大于-1.0,则结果为负零.

请注意,Math.ceil(x)的值正好是-Math.floor(-x)的值.

参数:

  • a - 一个值.

返回:

最小(最接近负无穷大)浮点值,该值大于或等于参数且等于数学整数.

  • _ceil_ 返回一个 _double_,他要求 _int_ (3认同)

小智 8

简单来说,

  • Math.ceil将总是向上舍入或如上所述,过量.
  • Math.round 将根据小数向上或向下舍入.
    • 如果小数等于或大于5,则向上舍入.
      • 十进制=> 5.(1,5 = 2)
    • 如果小数小于5,则向下舍入.
      • 小数<5.(1,45 = 1)

示例Math.ceilMath.round:

下面的代码将返回:
成本,没有Ceil 2.2和Ceil 3(int),3.0(双).如果我们围绕它:2

    int m2 = 2200;
    double rate = 1000.0;

    int costceil = (int)Math.ceil(m2/rate);
    double costdouble = m2/rate;
    double costdoubleceil = Math.ceil(m2/rate);
    int costrounded = (int)Math.round(m2/rate);
    System.out.println("Cost, without Ceil "+costdouble+" and with Ceil "+
            costceil+"(int), "+costdoubleceil+"(double). If we round it: "+costrounded);
Run Code Online (Sandbox Code Playgroud)

如果我们将m2的值更改为例如2499,则结果为:Cost,不使用Ceil 2.499,使用Ceil 3(int),3.0(double).如果我们将它舍入:2
如果我们将m2的值更改为例如2550,则结果为:
Cost,不使用Ceil 2.55,使用Ceil 3(int),3.0(double).如果我们围绕它:3

希望能帮助到你.(从以前的答案中提取的信息,我只是想让它更清楚).


Bas*_*que 6

太长了;博士

BigDecimal( "3.2" ).setScale( 0 , RoundingMode.CEILING )
Run Code Online (Sandbox Code Playgroud)

4

BigDecimal

如果您想要精度而不是性能,请避免浮点技术。这意味着要避免float、、、。为了准确性,请使用类。FloatdoubleDoubleBigDecimal

在 上BigDecimal设置比例,即小数点右侧的位数。如果不需要小数,请将比例设置为零。并指定舍入模式。要始终向上舍入分数,请使用RoundingMode.CEILING,记录为:

舍入模式向正无穷大舍入。如果结果为正,则行为与 RoundingMode.UP 相同;如果为负,则行为与 RoundingMode.DOWN 相同。请注意,此舍入模式永远不会减少计算值。例如,1.1 变成 2,3.2 变成 4。

BigDecimal bd = new BigDecimal( "3.2" ) ;
BigDecimal bdRounded = bd.setScale( 0 , RoundingMode.CEILING ) ;
String output = bdRounded.toString() ; 
System.out.println( "bdRounded.toString(): " + bdRounded ) ;  // 4
Run Code Online (Sandbox Code Playgroud)

4

请参阅在 IdeOne.com 上实时运行的代码