将字符串转换为双精度的最佳方法

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,5001.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?

以上是关于将字符串转换为双精度的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

尝试将字符串转换为双精度时出错

将列的数据类型从字符串转换为双精度

C++ 将字符串转换为双精度

使用 '%' 将字符串转换为双精度

如何在特定关键字之后将字符串转换为双精度?

译将字符转换为双精度浮点型