Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何按点将一个双精度数拆分为两个十进制数?_Java - Fatal编程技术网

在Java中,如何按点将一个双精度数拆分为两个十进制数?

在Java中,如何按点将一个双精度数拆分为两个十进制数?,java,Java,试图将一个双精度数字按点分成两个小数部分。这样:1.9分为1和9;0.16分为0和16 我是这样做的,但似乎有点多余,最好的方法是什么 原点编号始终类似于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 = dStrin

试图将一个双精度数字按点分成两个小数部分。这样:1.9分为1和9;0.16分为0和16

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

原点编号始终类似于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);

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

将小数部分作为
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或更大,则
子字符串()
parseInt()
将失败。您可能希望将
substring()
调用更改为以下内容:

String bString = dString.split("\\.")[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]);
现在
strarray[0]
将保留12,而
strarray[1]
将保留5。您可以通过编写以下代码将它们转换为整数:

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

你也可以这样试试

    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

你可以像对待字符串一样对待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

这是一个两行版本:

int a = (int)d;
int b = Integer.parseInt((d + "").split("\\.", 2)[1]).replaceAll("^$", "0"));
第一部分很简单-只需转换为
int
,它会自动删除数字的任何小数部分

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

  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);

试试这个。这将起作用。

此解决方案应适用于几乎任何长度的小数部分,并且不使用字符串。 例如,接受的答案不适用于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

以下是另一种方法:

double d=1.9;
int a;
int b;

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

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

你可以使用String.split(“.”)当给定的数字是
1.1
1.01
1.001
,等等时,你期望得到什么?@Marco:你的意思是
String.split(\\”)
@ntalbs在我的例子中没有这样的数字。只有0.x或1.x或0.xx或1.xx和xx>10@Keppil你说得对!你必须先做
a
a我确实先做了“a”,它在哪里初始化?谢谢你,因为我在写代码的时候删除了太多我应该删除的东西。再次抱歉,这不是一种很优雅的方式,在字符串变量中放入双精度。请确保你在“\\”上拆分。“@JrChen好吧,它过去不起作用,现在它正在使用
String
instead@Rucbira.. 我不清楚
拆分(\\”
部分。。
拆分(“.”
部分不够吗?@KidusTekeste请参见:。如果要在文字dotYes上拆分,则需要转义该点。。我已经查过了。。现在明白了。谢谢@frianH
double d=1.9;
int a;
int b;

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

System.out.print("a");
System.out.print("b");
    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);