如何截断double值?

时间:2013-03-04 12:33:35

标签: java

我想截断双倍。

e.g。

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是否支持任何支持截断的函数而不是舍入??

2 个答案:

答案 0 :(得分:4)

一般来说,你不能,至少不能使用double。原因是许多数字根本无法准确表示,即使它们的小数位数很少。

以0.1为例。最近的double是0.1000000000000000055511151 ...并且没有任何截断量可以准确地给出0.1。

答案 1 :(得分:0)

您可以使用DecimalFormat类。

double d = 3.123456789087654;

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

这将围绕最后一位数。

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

唯一的方法是转换为字符串,然后将子字符串转换回double。