例如,我有变量3.545555555,我希望将其截断为3.54。
例如,我有变量3.545555555,我希望将其截断为3.54。
Answers:
如果您希望将其用于显示目的,请使用java.text.DecimalFormat
:
new DecimalFormat("#.##").format(dblVar);
如果需要进行计算,请使用java.lang.Math
:
Math.floor(value * 100) / 100;
floor
截断仅适用于正值。
RoundingMode.DOWN
并且RoudingMode.FLOOR
总是朝着负无穷大方向取整。
Bit Old Forum,以上答案均不适用于正值和负值(我的意思是进行计算,只是在不舍入的情况下进行截断)。从如何在Java中将数字四舍五入到小数点后n位链接
private static BigDecimal truncateDecimal(double x,int numberofDecimals)
{
if ( x > 0) {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_FLOOR);
} else {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_CEILING);
}
}
这种方法对我来说很好用。
System.out.println(truncateDecimal(0, 2));
System.out.println(truncateDecimal(9.62, 2));
System.out.println(truncateDecimal(9.621, 2));
System.out.println(truncateDecimal(9.629, 2));
System.out.println(truncateDecimal(9.625, 2));
System.out.println(truncateDecimal(9.999, 2));
System.out.println(truncateDecimal(-9.999, 2));
System.out.println(truncateDecimal(-9.0, 2));
结果:
0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00
如果出于某种原因,您不想使用a BigDecimal
,则可以将double
其int
转换为an 来截断它。
如果要截断到Ones位置:
int
到第十位:
int
double
百度广场
例:
static double truncateTo( double unroundedNumber, int decimalPlaces ){
int truncatedNumberInt = (int)( unroundedNumber * Math.pow( 10, decimalPlaces ) );
double truncatedNumber = (double)( truncatedNumberInt / Math.pow( 10, decimalPlaces ) );
return truncatedNumber;
}
在这个例子中,decimalPlaces
将名额过去的那些地方,你想要去的,所以1将轮至十分之一的地方,2至百分之一,依此类推(0发到那些地方,负一层至几十等)
unroundedNumber
足够大,则乘法和强制转换都将最终丢弃数据,并导致有效的随机数。它可能适用于问题中的示例,但通用解决方案应适用于任何示例double
。
我认为格式化为字符串并将其转换为双精度将为您提供所需的结果。
double值将不是round(),floor()或ceil()。
一个快速的解决方法可能是:
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
您可以使用sValue进行显示,也可以使用newValue进行计算。
您可以使用NumberFormat类对象来完成任务。
// Creating number format object to set 2 places after decimal point
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setGroupingUsed(false);
System.out.println(nf.format(precision));// Assuming precision is a double type variable
这是我使用的方法:
double a=3.545555555; // just assigning your decimal to a variable
a=a*100; // this sets a to 354.555555
a=Math.floor(a); // this sets a to 354
a=a/100; // this sets a to 3.54 and thus removing all your 5's
也可以这样做:
a=Math.floor(a*100) / 100;
可能正在关注:
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
快速检查是使用Math.floor方法。我创建了一种方法来检查以下两个或两个以下小数位的双精度:
public boolean checkTwoDecimalPlaces(double valueToCheck) {
// Get two decimal value of input valueToCheck
double twoDecimalValue = Math.floor(valueToCheck * 100) / 100;
// Return true if the twoDecimalValue is the same as valueToCheck else return false
return twoDecimalValue == valueToCheck;
}
我有一个稍微修改的Mani版本。
private static BigDecimal truncateDecimal(final double x, final int numberofDecimals) {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_DOWN);
}
public static void main(String[] args) {
System.out.println(truncateDecimal(0, 2));
System.out.println(truncateDecimal(9.62, 2));
System.out.println(truncateDecimal(9.621, 2));
System.out.println(truncateDecimal(9.629, 2));
System.out.println(truncateDecimal(9.625, 2));
System.out.println(truncateDecimal(9.999, 2));
System.out.println(truncateDecimal(3.545555555, 2));
System.out.println(truncateDecimal(9.0, 2));
System.out.println(truncateDecimal(-9.62, 2));
System.out.println(truncateDecimal(-9.621, 2));
System.out.println(truncateDecimal(-9.629, 2));
System.out.println(truncateDecimal(-9.625, 2));
System.out.println(truncateDecimal(-9.999, 2));
System.out.println(truncateDecimal(-9.0, 2));
System.out.println(truncateDecimal(-3.545555555, 2));
}
输出:
0.00
9.62
9.62
9.62
9.62
9.99
9.00
3.54
-9.62
-9.62
-9.62
-9.62
-9.99
-9.00
-3.54
//if double_v is 3.545555555
String string_v= String.valueOf(double_v);
int pointer_pos = average.indexOf('.');//we find the position of '.'
string_v.substring(0, pointer_pos+2));// in this way we get the double with only 2 decimal in string form
double_v = Double.valueOf(string_v);//well this is the final result
好吧,这可能有点尴尬,但是我认为它可以解决您的问题:)