0

我想截断双精度。

例如

double d=3.123456789087654;

如果我想将它截断到小数点后的第 10 位,结果应该是

result: 3.1234567890

结果我不需要四舍五入值

我尝试了自己的功能

     static double truncateDouble(double number, int numDigits) {
    double result = number;
    String arg = "" + number;
    int idx = arg.indexOf('.');
    if (idx!=-1) {
        if (arg.length() > idx+numDigits) {
            arg = arg.substring(0,idx+numDigits+1);
            result  = Double.parseDouble(arg);
        }
    }
    return result ;
 }

但没有得到我想要的适当结果..谁能帮我解决我的问题。

java是否支持任何支持截断不四舍五入的功能?

4

2 回答 2

4

一般来说,你不能,至少不能使用double. 原因是许多数字根本无法准确表示,即使它们有少量的十进制数字。

以0.1为例。最接近double的是 0.1000000000000000055511151 ......并且没有多少截断会给你正好 0.1。

于 2013-03-04T12:40:15.553 回答
0

您可以使用 DecimalFormat 类。

double d = 3.123456789087654;

DecimalFormat newFormat = new DecimalFormat("#.##########");
double tenDecimal =  Double.valueOf(newFormat.format(d));

这将四舍五入最后一位数字。

我同意 NPE。没有多少截断会给你正好 0.1。

唯一的方法是转换为字符串,然后子字符串转换回双精度。

于 2013-03-04T12:37:14.380 回答