【问题标题】:How to convert string with int to string with double?如何将带有int的字符串转换为带有double的字符串?
【发布时间】:2017-12-20 14:36:09
【问题描述】:

我正在构建一个计算器,为了让计算器工作,我需要将我的字符串中的所有 int 数字转换为 double 数字。比如我有这个字符串:3*8+5/2-4,我想把他转换成:3.0*8.0+5.0/2.0-4.0。 我该怎么做?

编辑:如果我有这个字符串:3.0*8.0+5.0/2.0-4,我想将他转换为:3.0*8.0+5.0/2.0-4.0

【问题讨论】:

  • 解析时使用Double#parseDouble即可。
  • 如果字符串中已经有双精度数了怎么办,比如 3.4564646?是否应该四舍五入到小数点后一位?
  • @JacobG.,他无法将他的字符串解析为 double,因为它包含数学运算符,例如 +、/、- 等
  • @KillerDeath OP 显然会先拆分 String :P
  • 如何拆分字符串?以及下一步该怎么做?

标签: java android string int double


【解决方案1】:

您可以使用String#replaceAll通过正则表达式替换字符串,例如:

String regex = "(?<=^|[+/(*)-])(\\d+)(?=[+/(*)-]|$)";

// $1 references to the first captured group ---v
String result1 = "3*8+5/2-4".replaceAll(regex, "$1.0");
//     ^--- "3.0*8.0+5.0/2.0-4.0"

String result2 = "3.0*8+5/2-4.0".replaceAll(regex, "$1.0");
//     ^--- "3.0*8.0+5.0/2.0-4.0"

String result3 = "3.0*(8+5)/(2-4.0)".replaceAll(regex, "$1.0");
//     ^--- "3.0*(8.0+5.0)/(2.0-4.0)"

【讨论】:

  • 如果已经存在双数,您的解决方案将不起作用
  • @AlexandrLihonosov OP 说 intdouble。你看到OP的问题了吗?
  • 是的,这只是我的假设,也可能是这样的:3*8+5/2-4+3.5 为什么不呢?
  • @AlexandrLihonosov :),没关系。我承认不支持doubles。
  • 如果 OP 使用逆波兰表示法 (RPN) 之类的东西来实现计算器,他可以将堆栈中的值解析为 Double,但如果没有所有要求,我们无法给出完整的答案: )
猜你喜欢
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
相关资源
最近更新 更多