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)
makesMath.round(12873)
results12873
12873
的结果是long
键入的值,但不是double
值非十进制
结果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)