Joh*_*nny 78 java double truncate decimalformat
例如,我有变量3.545555555,我想截断到3.54.
Boz*_*zho 125
如果您想将其用于显示目的,请使用java.text.DecimalFormat:
new DecimalFormat("#.##").format(dblVar);
Run Code Online (Sandbox Code Playgroud)
如果您需要它进行计算,请使用java.lang.Math:
Math.floor(value * 100) / 100;
Run Code Online (Sandbox Code Playgroud)
小智 42
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);
Run Code Online (Sandbox Code Playgroud)
检查可用RoundingMode和DecimalFormat.
Man*_*ani 18
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法对我来说很好.
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));
Run Code Online (Sandbox Code Playgroud)
结果:
0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00
Run Code Online (Sandbox Code Playgroud)
首先请注意a double是二进制小数,并且实际上没有小数位.
如果你需要小数位,请使用a BigDecimal,它有一个setScale()截断方法,或者DecimalFormat用来得到一个String.
小智 7
无论出于何种原因,如果您不想使用a,BigDecimal您可以将double其转换int为截断它.
如果要截断到Ones位置:
int到十分之一:
intdoubleHundreths的地方
例:
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;
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,decimalPlaces将是你希望去的地方PAST的数量,所以1会绕到十分位置,2到百分之一,依此类推(0 轮到那些地方,负数到数十呢)等)
您可以使用 NumberFormat Class 对象来完成该任务。
// 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
Run Code Online (Sandbox Code Playgroud)
格式化为字符串并转换回双精度我认为会给你你想要的结果。
double 值不会是 round()、floor() 或 ceil()。
一个快速解决方法可能是:
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
Run Code Online (Sandbox Code Playgroud)
您可以使用 sValue 进行显示或使用 newValue 进行计算。
3.545555555 得到 3.54。为此尝试以下操作:
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.FLOOR);
double result = new Double(df.format(3.545555555);
Run Code Online (Sandbox Code Playgroud)
这将给出 = 3.54!
| 归档时间: |
|
| 查看次数: |
257462 次 |
| 最近记录: |