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