How can I truncate a double to only two decimal places in Java?
例如,我有一个变量3.545555555,我想把它截断为3.54。
如果要将其用于显示目的,请使用
1 |
如果需要计算,请使用
1 |
1 2 3 |
检查可用的
有点老套,上面的答案都不适用于正值和负值(我指的是计算,只是做不舍入的截断)。从Java链接中的数字到小数位数
1 2 3 4 5 6 7 8 | 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); } } |
这种方法对我很管用。
1 2 3 4 5 6 7 8 | 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)); |
结果:
1 2 3 4 5 6 7 8 | 0.00 9.62 9.62 9.62 9.62 9.99 -9.99 -9.00 |
首先要注意,
如果需要小数位,可以使用
如果出于任何原因,您不想使用
如果要截断到一个位置:
- 简单铸造至
int
到十分之一的地方:
- 乘以十
- 铸造至
int 。 - 返回到EDOCX1[4]
- 除以十。
地方广场
- 乘以100等。
例子:
1 2 3 4 5 |
在这个例子中,
可能是
可以使用NumberFormat类对象来完成任务。
1 2 3 4 5 6 | // 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,我认为这将为您提供所需的结果。
double值将不是round()、floor()或ceil()。
快速修复可能是:
1 2 |
您可以使用sValue进行显示,也可以使用newValue进行计算。
以下是我使用的方法:
1 2 3 4 | 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 |
也可以这样做:
1 |
3.545555555得到3.54。为此,请尝试以下操作:
1 2 3 4 5 | DecimalFormat df = new DecimalFormat("#.##"); df.setRoundingMode(RoundingMode.FLOOR); double result = new Double(df.format(3.545555555); |
这将得出=3.54!
快速检查是使用math.floor方法。我创建了一个方法来检查下面两个或更少小数位的双精度:
1 2 3 4 5 6 7 8 | 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; } |
可能如下:
1 2 3 4 | double roundTwoDecimals(double d) { DecimalFormat twoDForm = new DecimalFormat("#.##"); return Double.valueOf(twoDForm.format(d)); } |
1 2 3 4 5 | //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 |
嗯,这可能有点尴尬,但我认为这可以解决你的问题:)
这对我很有用:
1 2 3 4 5 6 | double input = 104.8695412 //For example long roundedInt = Math.round(input * 100); double result = (double) roundedInt/100; //result == 104.87 |
我个人喜欢这个版本,因为它实际上执行的是数字舍入,而不是将其转换为字符串(或类似的),然后格式化它。
我有一个稍微修改过的曼尼版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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)); } |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 |