【问题标题】:Best way to convert string to double将字符串转换为双精度的最佳方法
【发布时间】:2014-09-17 20:00:11
【问题描述】:

我需要将一些字符串转换为双精度。

这些字符串来自第三方服务,可能会改变格式。

我需要创建一个接受字符串并返回双精度的函数。

字符串可以是:

  1. “80.00”
  2. “80.50”
  3. “80,50”
  4. “80,00”
  5. “80”
  6. “1.500.50”
  7. “1500.50”
  8. “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。首先需要有关区域设置的更多信息。

标签: java double


【解决方案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?
    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2015-04-24
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多