如何从双精度浮点数中获取整数部分的小数位?

3
如何将一个双精度数拆分为两个整数,第一个整数是小数点前的数字,第二个整数是小数点后的数字。 例如:
            double doub = 543.345671;
            int num1 = (int) doub; //543
            int num2 = getNumAfterDecimal(doub-num1); //return 345671

我需要将小数部分转换为整数。


你是否总是希望小数点后有6位数字? - user2956272
2
“second number after decimal point” 是什么意思?您想要几位数?一个“double”类型的数字没有固定的精度... - Oscar Pérez
我只需要小数点后六位。 - Yaroslav Nudnenko
可能是将双精度数分离为整数和小数部分的重复问题。 - Anish B.
5个回答

3

使用Double.toString()double映射为StringDouble.toString(doub),然后使用String.split("\\.")将不同部分作为String获取。然后,可选地,使用Integer.valueOf()将这些值解析为Integer

double doub = 543.345671;
// Here, you want to split the String on character '.'
// As String.split() takes a regex, the dot must be escaped. 
String[] parts = Double.toString(doub).split("\\.");
System.out.println(Integer.valueOf(parts[0]));
System.out.println(Integer.valueOf(parts[1]));

输出:

543
345671

2
最初的回答:这取决于您想要小数点后面有多少位数字,但这是主要思路:

这取决于你想要保留几位小数,但大致上可以这样做:

double d = doub - (int)doub; // will give you 0.xyz
int result = d * 1000; // this is for 3 digits, the number of zeros in the multiplier decides the number of digits 

2

使用正则表达式拆分获取它,

最初的回答
double doub = 543.345671;
String data[] = String.valueOf(doub).split("\\.");
System.out.println("Before decimal: " + Integer.parseInt(data[0]) + ", After decimal: " + Integer.parseInt(data[1]));

Prints,

Before decimal: 543, After decimal: 345671

2

As I see,

Double d=543.345671;
String line=String.valueOf(d);
String[] n=line.split("\\.");
int num1=Integer.parseInt(n[0]);
int num2=Integer.parseInt(n[1]);

不算太糟糕,但小数点后的零被省略了。举个例子:如果d=35.0067,那么我得到的num2是67,我不知道还有多少个零被省略了。 - Yaroslav Nudnenko
1
是的,因为int会丢失前导零,如果需要以零开头,则不应将其转换为int,而应保留为字符串。 - Dred

1

这正是我需要的。谢谢,Nir Levy!但有时会出现舍入误差。

    double doub = 543.04;
    int num1 = (int) doub; //543
    int num2 = (int) ((doub-num1)*1000000); //39999

我添加了Math.round()以正确获取小数部分。

    double doub = 543.04;
    int num1 = (int) doub; //543
    int num2 = (int) Math.round((doub-num1)*1000000); //40000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接