将字符串转换为双精度的最佳方法
Posted
技术标签:
【中文标题】将字符串转换为双精度的最佳方法【英文标题】:Best way to convert string to double 【发布时间】:2014-09-17 20:00:11 【问题描述】:我需要将一些字符串转换为双精度。
这些字符串来自第三方服务,可能会改变格式。
我需要创建一个接受字符串并返回双精度的函数。
字符串可以是:
-
“80.00”
“80.50”
“80,50”
“80,00”
“80”
“1.500.50”
“1500.50”
“1500,00”
等等……
我尝试的是:
function double convert(String s)
s = s.replace(".","").replace(",",".");
return Double.parseDouble(s);
这并没有涵盖所有情况。
有人可以帮帮我吗?
谢谢!
【问题讨论】:
那太痛苦了。你怎么知道1,500
是1.500
还是1500
?
你的替换不是要把 80.00 变成 8000、1.500.00 变成 150000 等等吗?
如何将#6 转换为双精度数?
同意@HuStmpHrrr。首先需要有关区域设置的更多信息。
你应该阅读这个***.com/questions/4713166/…
【参考方案1】:
下面的方法呢?它将所有,
替换为.
并删除除最后一个.
之外的所有内容:
public double convert(String s)
s = s.replace(",",".").replaceAll("\\.(?=.*\\.)","");
return Double.parseDouble(s);
【讨论】:
嗯1,000,000
在我看来就像一百万。
@aioobe:当然,但不可能涵盖所有可能的数字格式。这至少涵盖了所有 OP 示例。
这就是解决方案!谢谢!它涵盖了所有格式。谢谢谢谢!【参考方案2】:
使用 java NumberFormat 类:
import java.text.NumberFormat;
import java.text.ParseException;
public class Solution
public static void main(String[] args) throws ParseException
String num = "80,00.34";
NumberFormat form = NumberFormat.getInstance();
System.out.println(form.parse(num).doubleValue());
这适用于所有情况,除了我认为不是任何有效数学格式的 #6。
您也可以根据您的语言环境获取 NumberFormat 实例:
NumberFormat form = NumberFormat.getInstance(Locale.UK);
【讨论】:
#6 "1.500.50" 应该是 1500.50【参考方案3】:查找 ',' 和 '.' 的最后一个索引并替换所有“,”和“。”直到那个时候''。
然后替换','或'.'的最后一个索引和 '。'
Double.parseDouble()
最后一个字符串。
【讨论】:
【参考方案4】:DecimalFormat 在去往/来自任何格式时都应该有用
【讨论】:
不是说甲骨文会倒闭,但是您是否有机会在您的答案中添加一些内容以使其更加SOish?以上是关于将字符串转换为双精度的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章