gpt4 book ai didi

java - Android - 将 Arch 转换为 Decimal

转载 作者:行者123 更新时间:2023-12-01 05:42:19 24 4
gpt4 key购买 nike

我正在创建一个英尺和英寸计算器。我希望用户能够以各种方式输入信息,例如 1'-4-5/8"1 4 5/8

在进行数学计算时,上述数字必须转换为十进制(1'-4-5/8"是十进制英寸的 16.625)。最终结果将以十进制英寸为单位,或者然后转换回英尺,英寸。

我将如何解析建筑测量并将其转换为十进制英寸?

任何帮助将不胜感激!

谢谢!

编辑:经过太多的时间和尝试了很多不同的事情之后,我想我得到了一些有用的东西。我最终将限制用户输入长度的方式,所以我认为以下内容将会起作用。它可能尚未优化,但这是我现在能得到的最好的。

public class delim_test_cases {

public static void main(String[] args) {

double inches = 0;
double feet = 0;
double fract = 0;
String str = "2'-3-7/8";
String[] TempStr;
String delimiter = ("[-]+");
TempStr = str.split(delimiter);

for(int i=0; i< TempStr.length ; i++ ) {

for(int z=0; z< TempStr[i].length() ; z++ ) {

if (TempStr[i].charAt(z) == '\'') {
String[] FeetStr;
String feetdelim = ("[\']+");
FeetStr = TempStr[i].split(feetdelim);
feet = Integer.parseInt(FeetStr[0]);
}

else if (TempStr[i].charAt(z) == '/') {
String[] FracStr;
String fracdelim = ("[/]+");
FracStr = TempStr[i].split(fracdelim);
double numer = Integer.parseInt(FracStr[0]);
double denom = Integer.parseInt(FracStr[1]);
fract = numer/denom;
}

else if (TempStr[i].indexOf("\'")==-1 && TempStr[i].indexOf("/")==-1) {
String inchStr;
inchStr = TempStr[i];
inches = Integer.parseInt(inchStr);
}

}
}

double answer = ((feet*12)+inches+fract);
System.out.println(feet);
System.out.println(inches);
System.out.println(fract);
System.out.println(answer);
}
}

最佳答案

为什么不直接用“-”或空格进行分割,那么你就会得到一个可能包含 3 个字符串的数组。

因此,您查看最后一个字符,如果它是单引号,则将其乘以 12。

如果是双引号,则用“/”分隔并仅计算分数,对于两者都不是的数字,它是英寸,只需将其添加到总数中即可。

这样您就不会假设顺序,或者如果您只有小数英寸会怎样。

只需循环遍历数组,然后执行上面的算法,所以如果有人这样做

3'-4'-4/2"然后你就可以轻松计算了。

更新:

我正在根据OP的评论添加代码。

您可能需要引用此内容以获取有关 split 的更多想法.

http://www.java-examples.com/java-string-split-example

但是,基本上,只需做这样的事情(未经测试,只是写出来):

public double convertArchToDecimal(String instr, String delimiter) {
String[] s = instr.split(delimiter);
int ret = 0;
for(int t = 0; t < s.length; t++) {
char c = s[t].charAt(s[t] - length);
switch(c) {
case '\'': //escape single quote
String b = s[t].substring(0, s[t].length - 1).split("/");
try {
ret += Integer.parse(s[t].trim()) * 12;
} catch(Exception e) { // Should just need to catch if the parse throws an error
}
break;
case '"': // may need to escape the double quote
String b = s[t].substring(0, s[t].length - 1).split("/");
int f = 0;
int g = 0;
try {
f = Integer.parse(b[0]);
g = Integer.parse(b[1]);
ret += f/g;
} catch(Exception e) {
}
break;
default:
try {
ret += Integer.parse(s[t].trim());
} catch(Exception e) { // Should just need to catch if the parse throws an error
}
break;
}
}
return ret;
}

我捕获的异常数量超出了需要的数量,您可能需要使用 trim()方法比我更多,在解析之前去除空格,以防止 3 / 5 "例如。

通过传递空格或破折号应该足以满足您的需求。

您可能还需要四舍五入到一些有效数字,否则四舍五入可能会在以后给您带来问题。

关于java - Android - 将 Arch 转换为 Decimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com