提问者:小点点

将双精度转换为字符串分数(鞋码)


因此,对于我的项目,我必须编写一个将双精度值转换为字符串的方法。我了解如何以多种方式执行此操作-多种格式选项。我感到困惑的是如何将半码(鞋)转换为分数版本,同时仍将其转换为字符串。因此10.5返回10-1/2

任何提示或有用的指针都很感激。抱歉,如果这是一个愚蠢的问题,我还在学习。:)


共3个答案

匿名用户

您可以使用模数运算符(%)来完成您想要的操作,Java可以与浮点值一起使用。如果您执行shooeSize%1,您将获得0.5和0.0,因此您只需检查该值即可将“1/2”添加到字符串表示中。这是一个简单的例子

public class ShoeSize {
    double size;
    public ShoeSize(double size) { this.size = size; }

    public String toString() {
        return "" + (int)size + (size % 1 == 0.5? " 1/2" : "");
    }

    public static void main(String args[]) {
        ShoeSize ss1 = new ShoeSize(10.5);
        ShoeSize ss2 = new ShoeSize(11);
        ShoeSize ss3 = new ShoeSize(11.5);

        System.out.println(ss1);
        System.out.println(ss2);
        System.out.println(ss3);
    }
}

前面代码的结果是:

10 1/2
11
11 1/2

然而,你真的不应该采用这种方法。那是因为根据你管理鞋码值的方式,它可能会导致不可预测的结果,仅仅因为浮点值的算术不像整数值那样精确。像下面这样的一些简单操作可能会引入足够的错误,所以结果不是你期望的:

...

public static void main(String args[]) {
    ShoeSize ss = new ShoeSize(10.0);
    ss.size += 0.1 + 0.2 + 0.3; // Sum it half

    System.out.println(ss);
}

此代码现在打印10而不是10 1/2。

你应该怎么做呢?嗯,有几种方法。例如,你可以将鞋码存储在int表示中,每个单位代表一半。如果你有addSize或减法等操作,这种内部表示很容易出错。唯一的问题是读取用户的尺寸;最好的方法可能是有一个预定义的尺寸列表供用户选择。下面是一个例子:

public class ShoeSize {
    int halves;

    public ShoeSize(double size) { this.halves = (int)(size * 2); }

    public String toString() {
        return "" + (halves / 2) + (halves % 2 == 1? " 1/2": "");
    }

    public static void main(String args[]) {
        ShoeSize ss = new ShoeSize(10.5);
        System.out.println(ss);
    }
}

更好的是,由于鞋码在某些值之间受到很大的限制,你可以用一个枚举来表示它们的值。每个枚举都可以由人类可读的尺码字符串(例如“10 1/2”)构造,无效的鞋码永远不会有问题。这种方法的唯一问题是需要定义一个自定义方法来获取下一个和上一个鞋码,但这里有一个问题可以帮助您:[在枚举类型上实现“下一个”和“上一个”的最佳方法是什么?

匿名用户

试试这个

public String getShoeSize(double size) {
    int s = (int)size;
    String shoeSize = Integer.toString(s);
    //check if it is a half value
    if(size > s) {
        shoeSize += " - 1/2";
    }
    return shoeSize;
}

匿名用户

首先将double的值转换为字符串并将其拆分:

double d=10.5;
String s = String.valueOf(d);
String[] newstr =s.split(".");

然后,如果分数是有限的,使用.5、.25、.75的切换情况,但它不受限制,如果您可以遵循以下步骤,简化分数很容易:注意这一点,也许您的数字不是点符号,例如10,在切换情况下必须考虑

1.查找num和den的gcd,所以你有gcd=GCDFind(gcd, num);

2.now,如果gcd==1,那么分数不能被简化(它已经是简化形式)。

3.如果gcd

有限示例:

double s = 10.25;
        String aString = Double.toString(s);
        String[] fraction = aString.split("\\.");

        int denominator = (int)Math.pow(10, fraction[1].length());
        int numerator = Integer.parseInt(fraction[0] + "" + fraction[1]);
        int t=numerator%denominator;

        switch(t){
            case 0: System.out.println(numerator/denominator);break; //example : 10
            case 5: System.out.println(numerator/denominator + " - " +"1/2");break; //example : 10.5
            case 25: System.out.println(numerator/denominator + " - " +"1/4");break; //example : 10.25
            case 75: System.out.println(numerator/denominator + " - " +"3/4");break; //example : 10.75
            default:System.out.println("Not in 1/2, 1/4 or 3/4");
        }