如何在Java中将双数字分成两个十进制数?

时间:2014-07-15 08:18:14

标签: java

尝试通过点将双数分成两个小数部分。像这样:1.9分为1分和9分; 0.16分为0和16;

这是我做的,但似乎有点多余,最好的方法是什么?

原点编号将始终为Just 0.x或1.x或0.xx或1.xx和xx> 10

    double d = 1.9;
    int a, b;
    String dString = Double.toString(d);
    String aString = dString.substring(0, 1);

    String bString = dString.substring(2);
    a = Integer.parseInt(aString);
    b = Integer.parseInt(bString);

我这样做的方式似乎使用了很多字符串转换,我认为这种转换非常有效。

10 个答案:

答案 0 :(得分:10)

您也可以尝试这种方式

    double val=1.9;
    String[] arr=String.valueOf(val).split("\\.");
    int[] intArr=new int[2];
    intArr[0]=Integer.parseInt(arr[0]); // 1
    intArr[1]=Integer.parseInt(arr[1]); // 9

答案 1 :(得分:2)

要将小数部分作为int并不是真正遵循任何标准,那么您将坚持使用您的特殊解决方案。获得小数点之前的值可以简化为简单的转换:

double d = 1.9;
int a, b;
String dString = Double.toString(d);
String bString = dString.substring(2);
a = (int) d;
b = Integer.parseInt(bString);

请注意,如果数字为10或更大,则substring()parseInt()会失败。您可能希望将substring()调用更改为:

String bString = dString.split("\\.")[1];

答案 2 :(得分:2)

您可以将double视为字符串,并将其拆分为小数位。

     double d = 13454.92345;
     String bob = Double.toString(d);
     String[] convert = bob.split("\\.");

     int a = Integer.parseInt(convert[0]);
     int b = Integer.parseInt(convert[1]);

     System.out.println(a); // 13454
     System.out.println(b); // 92345

答案 3 :(得分:1)

double num=12.5;
String str=Double.toString(num);
String strarray[]=str.split("\\.");

现在strarray[0]将持有12,strarray[1]将拥有5.您可以通过编写以下代码将它们转换为整数:

int num1=Integer.parseInt(strarray[0]);
int num2=Integer.parseInt(strarray[1]);

答案 4 :(得分:1)

  double d = 1.9;
  String str = Double.toString(d);
  String strArray[] = str.split("\\.");

  int a = Integer.parseInt(strArray[0]);
  int b = Integer.parseInt(strArray[1]);
  System.out.print(a + " - " + b);

试试这个。这将有效。

答案 5 :(得分:0)

这是一个两行版本:

int a = (int)d;
int b = Integer.parseInt((d + "").split("\\.", 2)[1]).replaceAll("^$", "0"));

第一部分很简单 - 只需转换为int,它会自动删除数字的任何小数部分。

使用Strimg方法的第二部分是最简单的 - 在点上拆分字符串版本并使用第二部分。注意添加生成字符串的"",以及没有小数部分的边缘情况的处理,其中3作为双精度打印为3. - 如果结果是空白(由要拆分的第二个参数保证),然后转换为零。

答案 6 :(得分:0)

此解决方案几乎适用于小数部分的任何长度,并且不使用字符串。 例如,接受的答案不适用于0.16

double d = 123.456

long a = (long) d;
double f = d - a;

while (Math.abs((long) f - f) > 0.000001) f *= 10;

long b = (long) f;

// a = 123
// b = 345

答案 7 :(得分:0)

这是另一种方法:

double d=1.9;
int a;
int b;

a = (int) d/10;
b = (int) d%10;

System.out.print("a");
System.out.print("b");

答案 8 :(得分:0)

    double dub=1234.5678987;//Variable to be manipulated
    long lon=0; //To store before decimal point.    
    short sh=0;//To store after decimal point.  
    int deci=10000; //to 4 decimal places   
    lon=(int)dub;// get the integer part of the number stored in long   
    sh=(short)((dub-(double)lon)*deci);//deci to required decimal places.
    System.out.println(""+lon+"."+sh);

答案 9 :(得分:-1)

我尝试了分拆"。"然后只需解析整数的字符串。

        String a="";
        double x = 2.4;
        a=x+"";
        String [] v =a.split("\\.");
        int before = Integer.parseInt(v[0]);
        int after = Integer.parseInt(v[1]);