首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -将拱门转换为十进制

Android -将拱门转换为十进制
EN

Stack Overflow用户
提问于 2011-07-24 19:22:57
回答 1查看 297关注 0票数 1

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

在执行数学运算时,上述数字必须转换为小数(1'-4-5/8“是小数英寸中的16.625 )。最后的结果将是以十进制英寸为单位,或者再转换为英尺和英寸。

我将如何解析体系结构度量并将其转换为十进制?

任何帮助都将不胜感激!

谢谢!

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

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-24 19:46:08

为什么不直接在'-‘或空格上拆分,那么您就有了一个可能包含3个字符串的数组。

所以,你看最后一个字符,如果它是一个单引号,然后乘以12。

如果一个双引号,然后除以'/‘,然后计算分数,对于一个既不是这两个数字,它就是1英寸,把它加到总数中。

这样你就不会假设顺序,或者如果你有分数英寸的话。

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

3'-4'-4/2",然后您可以轻松地计算它。

更新:

我将根据OP的注释添加代码。

您可能需要参考这一点,以获得更多关于split的想法。

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

但是,基本上,只需这样做(没有测试,只是写出了):

代码语言:javascript
复制
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 "

通过通过一个空间或破折号,它应该足以满足你的需要。

您也可能想要舍入一些重要的数字,否则舍入以后可能会给您带来问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6809084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档