- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个英尺和英寸计算器。我希望用户能够以各种方式输入信息,例如 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/
我在使用的教程中遇到了这个不寻常的代码。 #if !(arch(x86_64) || arch(arm64)) func sqrt(a: CGFloat) -> CGFloat { return CG
我的应用程序需要 double 计算。根据我在谷歌上找到的内容,我应该添加一个标志“-arch sm_13”或“-arch sm_20”。 Q1:“-arch sm_13”和“-arch sm_20”
在从不同的规范文件构建一些 RPM 时,我收到了上述警告 Binaries arch (1) not matching the package arch (2). 代码和一切都给了我,我对 RPM 很
似乎 Microsoft Visual C++ 提供了可在两种名称格式下重新分发的 VC++ 运行时的等效副本。 VS2017: @ /cygdrive/c/Program Files (x86)/M
在 Kotlin 文件中,我有一个“未解析的引用:arch”。 import android.arch.lifecycle.Lifecycle import android.arch.lifecycl
目前,我们正在项目中使用LiveData、ViewModel 和Room。 我们正在使用 Java 8。 我们在build.gradle中使用以下内容 // ViewModel and LiveDat
我在 Macbook Pro 上的 VirtualBox 上运行 Ubuntu 14.04 64 位 MAC。我在 hello_kernel.c 中有以下内容,我想运行它。 #include #in
我创建了一个 github 操作来在推送时部署代码。 安装软件包时会导致此错误。 Run npm i --no-optional && cd client && npm i --no-optional
当我尝试在 Ubuntu 机器中启用 PPP 时,在 menuconfig 之后发生以下错误并尝试制作内核: $ sudo make make[1]: *** No rule to make targ
测试二进制 二进制没问题 npm WARN rollback 回滚 node-pre-gyp@0.12.0 失败(这可能是无害的): EPERM: operation not permitted, l
当我尝试在 Ubuntu 机器中启用 PPP 时,在 menuconfig 和尝试制作内核之后发生了以下错误: $ sudo make make[1]: *** No rule to make tar
我正在尝试安装Webpack但它不断地给我同样的警告,而且 webpack 仍然没有安装在我的项目中。这是我正在处理的一个现有项目。我尝试了很多命令,例如 npm install --no-optio
我在我的raspberry pi上安装python密码软件包时遇到了一些问题,特别是python版本3.9.8(与pyenv一起安装)。密码包是使用pacman(python-cryptography
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章Arch Linux安装后的一些初始设置简介由作者收集整理,如果你对这篇
我尝试在 ubuntu 12.04(64 位)上构建 gcc 4.8 主干。 当我使用配置时 ../gcc-trunk/configure -v --with-pkgversion='ubuntu12
slock 与 xfce 一起安装。 当我点击右上角的“锁定屏幕”时,屏幕变黑。按任意键,屏幕会变红,但如何取消呢? slock中没有解锁的UI? 最佳答案 我发现它只是在等待密码。输入正确的密码,屏
我正在尝试在 Cygwin 中为 Android NDK 配置工具链。我用这个tutorial .当我运行以下命令时: ./make-standalone-toolchain.sh --platfor
我安装了 Arch Arm到 Rpi3 上,然后将 sysroot rsync 到安装在 Lenovo thinkpad 上的 x86_64 Arch Linux。 然后我安装了 arm-linux-
我正在研究 Linux 内核模块。它需要有一种方法可以将所有进程显示为分层树。我已经编写了一个递归方法来显示进程及其子进程。我还尝试通过检查每个进程与 init_task 的距离来将其格式化为树。但是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!