【问题标题】:How to convert from fraction formatted string to Decimal or Float in Java?如何在 Java 中从分数格式的字符串转换为十进制或浮点数?
【发布时间】:2012-11-06 11:17:01
【问题描述】:

我从数据库中获取的字符串值很少,例如

"1/4","2/3"

但在显示为 Android ListView 内容时,我需要将其显示为 0.25,0.66

现在我不想拆分字符串,然后将单个字符串转换为数字和 然后将它们分开以获得结果。

有谁知道,有像Double.valueOfparseDouble 这样的直接函数吗?

【问题讨论】:

  • 您找到解决方案的要求似乎不合理,这似乎是这样做的最佳方法。
  • 是的,加布里埃尔,我什至在想,为什么有人会在数据库中将值保存为 1/4 和 2/3,但就客户而言,是的,它们确实有这样的值,所以需要这项工作-周围。
  • 我的评论不是关于如何保存数据(我自己也看到了一些奇怪的事情),而是关于你限制使用 split("/") 来解决问题。
  • 好的,但是我将如何使用拆分以外的方法将“1/4”字符串转换为 0.25 作为浮点值或双精度值?
  • 正如人们在答案上所说,没有方法,所以你应该使用拆分,这就是为什么我不明白你不想使用它。

标签: java android math


【解决方案1】:

为什么你“不想分割字符串,然后将单个字符串转换为数字,然后将它们分割以获得结果”

我不知道有任何内置函数可以做到这一点,所以最简单的解决方案:

double parse(String ratio) {
    if (ratio.contains("/")) {
        String[] rat = ratio.split("/");
        return Double.parseDouble(rat[0]) / Double.parseDouble(rat[1]);
    } else {
        return Double.parseDouble(ratio);
    }
}

它还涵盖了比率的整数表示的情况

parse("1/2") => 0.5
parse("3/7") => 0.42857142857142855
parse("1") => 1.0

【讨论】:

    【解决方案2】:

    我想你在过去 2 年里已经解决了这个问题;但是,您可以使用Apache commons fraction class

    它有一个内置的解析器,所以如果你要调用:

    Fraction fraction = Fraction.getFraction("1/2");
    double d = fraction.doubleValue();
    

    那么 d 应该包含 .5。

    【讨论】:

      【解决方案3】:

      您可以使用split("/") 拆分分数。然后您可以将这些值转换为Double 并执行除法。我不知道Android,这就是我在Java中的做法。

      【讨论】:

      • 引用 OP:“现在我不想拆分字符串,然后将单个字符串转换为数字,然后将它们划分为结果。”
      【解决方案4】:

      在 java 中,我们没有像 JavaScript 中的 eval 这样的东西,因此您可以使用 this

      【讨论】:

        【解决方案5】:

        我不认为有这样的事情。但我不明白你为什么不这样创建自己的函数:

        public static double fromStringFraction(String fraction){
            String[] fractionArray = fraction.split("/");
            try {
                if (fractionArray.length != 2){
                    if (fractionArray.length == 1){
                        return Double.parseDouble(fractionArray[0]);
                    }
                    else {
                        return 0d;
                    }
                }
                double b = Double.parseDouble(fractionArray[1]);
                if (b==0d){
                    return 0d;
                }
                Double a = Double.parseDouble(fractionArray[0]);
                return a/b;
            }
            catch (NumberFormatException e){
                return 0d;
            }
        }
        

        【讨论】:

        • 嘿,gabga,我已经写过,我知道通过拆分它可以实现结果,但不想做这样的工作。无论如何,谢谢。
        【解决方案6】:

        尝试使用

        SpannableStringBuilder test = new SpannableStringBuilder();
        test.append("\n");
        test.append(Html.fromHtml("<sup>5</sup>/<sub>9</sub>"));
        test.append("\n");
        

        【讨论】:

          猜你喜欢
          • 2010-11-07
          • 1970-01-01
          • 2020-12-11
          • 2020-10-17
          • 2017-09-28
          • 2016-01-01
          • 1970-01-01
          相关资源
          最近更新 更多