2013-03-04 138 views
0

我想截断double。如何截断double值?

例如

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是否支持这样的任何支持截断的函数不完整?

+0

出于好奇,你为什么要失去精确性? – Supericy 2013-03-04 12:35:38

+1

我对此毫无意义。在输出数字以外的其他位置是否有用于舍入/截断的用例?另外,虽然我有一个预感NPE是正确的,因为“适当”的结果是一个无法准确表示的数字,你能说你的代码的实际问题是什么?即什么是错误的结果,哪些输入和你所期望的? – millimoose 2013-03-04 12:48:00

+0

@millimoose:我的问题很简单..我想在小数点后的特定号码后打开double。 – kTiwari 2013-03-04 13:13:31

回答

0

您可以使用DecimalFormat类。

double d = 3.123456789087654; 

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

这将围绕最后一位数字。

我同意NPE。没有任何数量的截断会给你准确的0.1。

唯一的方法是将字符串转换为字符串,并将子字符串转换为双精度。

+0

这将圆。 – Boann 2013-03-04 12:39:11

+0

@Hemant:你正确的,因为你在DEciamlFormat方法中硬编码了#个符号,在第二次运行中,如果我想在十进制后改变截断点,那么这将不起作用,我将hv明确地改变它 – kTiwari 2013-03-04 12:45:23

4

一般来说,你不能,至少不能使用double。原因是很多数字不能完全表示,即使它们的小数位数很少。

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

+0

年点是正确的,但作为我的问题去..我想截断它达到一个指定的值可以完成.. – kTiwari 2013-03-04 13:00:57