1

假设如果我有 3.13 和 4.13,我希望能够检查 3.13 中的 0.13 和 4.13 中的 0.13。

我尝试了很多事情:

1)将两位小数转换为字符串并尝试用“。”将它们分开,但我无法让它工作

2)a = 3.14; a = a - Math.floor(a);尝试单独获得小数,但我最终得到 0.1400000001

4

4 回答 4

2

将两位小数转换为字符串并尝试用“。”将它们分开,但我无法让它工作

split使用正则表达式,因此您必须转义点。

string.split(".") 

应该成为

string.split("\\.")

有了这个,您应该能够正确拆分字符串并进行比较


顺便说一句,我会使用Reimenus 解决方案,当你有数字时,如果可以的话,最好使用数学。仅当您确实需要它们时才使用字符串。

于 2013-09-16T11:25:08.327 回答
2

您可以将小数部分分开进行比较

double value1 = 3.13;
double value2 = 4.13;
double fractional1 = value1 - (long)value1;
double fractional2 = value2 - (long)value2;
System.out.println(Double.compare(fractional1, fractional2));

阅读每个计算机科学家都应该知道的关于浮点运算的知识,看看为什么你在自己的数值运算之后会看到额外的数字

于 2013-09-16T11:29:27.640 回答
0

你的第二种方法实际上是正确的。比较双值时,您必须包含一个范围。Java:双值比较(请参阅此)

于 2013-09-16T11:47:28.627 回答
0

试试这个

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        float v1 = 3.13f,v2 = 4.13f;
        //Converting float value into String array
        String split1[]=Float.toString(v1).split("\\.");
        String split2[]=Float.toString(v2).split("\\.");

        //Comparing two strings
        if(split1[1].equals(split2[1]))
        {
            System.out.println("Yes");
        } 
    }
}
于 2013-09-16T12:01:01.413 回答