2012-10-24 36 views
11

我想双分成整数和小数部分分离双入整数和小数部分

因此,例如,数字24.4应分成24和4

int integer = (int)number; 
double decimal = number-(int)number; 
System.out.println(decimal); 

使用这种方法使我有以下值:

integer = 24 
decimal = 0.3999999999999986 

我需要十进制值是4

如何解决这个问题?

+0

你可以把它格式化为小数点后只打印一位数字。 –

+12

你是否明白24.4号码不能被完全表示为'double'? –

+0

@Ashish也试试我的解决方案!好有趣! :-) – RGO

回答

10

你可以做一个字符串split(...)。然后Integer parseInt(...)找回这两个整数分量。

+15

这很危险:2.03将作为小数部分“3”而不是“03”进行处理。 –

+0

这不是一个好习惯! –

4

这是因为double s不完全是“实数” - 请记住,在任何范围内都有无限数量的实数,而double中只有有限数量的数字 - 因此有限数量的值,所以某些圆关闭必须发生。

事实是,24.4不能通过double精确表示 - 让你的号码的分数确实是值得各地0.3999 ....
如果你想要一个确切的解决方案 - 你应该使用,让您精确值库为小数,例如BigDecimal

如果您想了解更多关于double S是不准确这个问题 - 你应该阅读更多关于floating points arithmeticsthis article,虽然高的水平,也才能真正了解发生了什么事情是必须的。

如果你还不能理解这些文章 - 只需要考虑:如果你需要一个确切的值 - double s不能提供它 - 你应该使用一个库,如果是这种情况。

5

根据的小数位数,您可以使用此方法:

double number = 24.4; 

int integer = (int)number; 
double decimal = (10 * number - 10 * integer)/10; 

System.out.println(decimal); 

说明:删除小数点,做减法,最后返回小数点回到它原来的位置!

+2

该技术在90%以上的案例中失败。 – EJP

+1

@EJP *取决于小数位数!*当只有一位十进制数字时,请给我看一个失败的案例。 – RGO

+0

0.1没有确切的表示。它怎么可能工作?尝试24.1到24.9。 – EJP

0

首先找到小数点后数字的数字,用这么多数量的10来代表乘数。例如:x = 26.78621然后乘以100000 [在这里你不能像x * 10那样相乘,再次x * 10等等(5次),第一次乘以10时,它会给你267.862199999 ..]从结果中减去2600000。这里是你的答案的链接,我已经编码了。 https://stackoverflow.com/a/18517555/2508414

1

![这里是我的解决方案] [1]

这里是我的解决方案。 我在C程序设计中使用的简单的方法,有两种不同的整数分割分数...这里下面是代码

#include<stdio.h> 
void main() 
{ 
float x=24.56; int y=(int)x; float z=(x-y)*1000000000; int zd=(int)z; 
printf("%lf",x); 
printf("\ninteger Part %d\n",y); 
printf("\nDecimal Part %d\n",zd); 
} 

输出


24。559999 整数部分24

小数部分559999488

1

这里是我写来完成这个小方法:

/** 
* 
* @param n 
* @return 
*/ 
private static double getFractionalPart(double n) {  
    if (n > 0) { 
     return n - Math.floor(n); 
    } else { 
     return ((n - Math.ceil(n)) * -1); 
    } 
} 
0

随着RGO说,你可以做到这一点,也有圆形的十进制数,以以获得适当的价值。 例如:

double number = 20.57; 

int integer = (int)number; 
double decimal = (10 * number - 10 * integer)/10; 
double temp = Math.round(decimal*100.0)/100.0; 
System.out.println("Int = " + integer + "\nDecimal = " + temp); 
1
double number = 20.57; 
Double.valueOf(String.valueOf(number)).intValue() 
0

你可以这样做:

使用1000拿到3分:

例如:

(1.2445 - 1) * 100 = 0.244