英尺和英寸表示为float,我希望5.7在这个场景中更大。如何处理,因为这返回1
Float f1 = Float.parseFloat("5.7");
Float f2 = Float.parseFloat("5.10");
System.out.println(f1.compareTo(f2));
我想我知道你的方法有什么缺陷了。
从字里行间看,我认为你想让"5.7"
表示5英尺7英寸。实际上,你把它解析为float
,它的意思是5 + 7/10英尺。同样,"5.10"
表示5 + 1/10英尺。小于5.7
.注意,这是十进制数的正常含义…正如我们在小学所教的那样。(且5.7
不小于5.10
!)
现在…如果你想让5.7
的意思是5英尺7英寸……您需要将字符串"5.7"
分成两部分,将这两部分转换为整数并进行一些算术。
像这样:
String feetAndInches = "5.10";
String[] parts = feetAndInches.split("\.");
float feet = parseFloat(parts[0]);
if (parts.length == 1) {
feet += parseFloat(parts[1]) / 12;
}
但是…我的建议是不要那样做:
- 这个符号是非标准的。
- 如果小数点后的数字大于11,则打破
- 如果没有小数点,含义可能有歧义。
- 这个表示法不能提供一种用一英寸的分数表示长度的相同方法。
最后:
英尺和英寸表示为float…
它们不应该用浮点数表示。时期。
不使用浮点数,您应该创建自定义类来处理英尺和英寸,您可以将它们存储为整数。这个类还应该实现Comparable接口。
public class FeetAndInches implements Comparable<FeetAndInches> {
private int feet;
private int inches;
public FeetAndInches(String s) {
String[] parts = s.split("\.");
if (parts.length == 1) {
feet = Integer.parseInt(parts[0]);
inches = 0;
} else if (parts.length == 2) {
feet = Integer.parseInt(parts[0]);
inches = Integer.parseInt(parts[1]);
} else throw new IllegalArgumentException();
}
@Override
public int compareTo(FeetAndInches that) {
if (this.feet == that.feet) {
return Integer.compare(this.inches, that.inches);
} else {
return Integer.compare(this.feet, that.feet);
}
}
}
编辑:根据@user16632363评论,您只能以英寸为单位存储值:
public class FeetAndInches implements Comparable<FeetAndInches> {
private int inches;
public FeetAndInches(String s) {
String[] parts = s.split("\.");
if (parts.length == 1) {
inches = Integer.parseInt(parts[0]) * 12;
} else if (parts.length == 2) {
inches = Integer.parseInt(parts[0]) * 12 + Integer.parseInt(parts[1]);
} else throw new IllegalArgumentException();
}
@Override
public int compareTo(FeetAndInches that) {
return Integer.compare(this.inches, that.inches);
}
}
你可以这样使用这个类:
FeetAndInches f1 = new FeetAndInches("5");
FeetAndInches f2 = new FeetAndInches("5.10");
System.out.println(f1.compareTo(f2));
演示:https://ideone.com/aaiOT8