gpt4 book ai didi

java - 在 Java 的 String 类中重新创建 valueOf(double d)

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:39 24 4
gpt4 key购买 nike

我做了一个对象,MyString。我不知道如何重新创建 valueOf(double d)。我为整数重新创建了 valueOf。为了方便起见,我将小数位数限制为 8 位。如何重新创建 valueOf(double d)?

public class MyString {

private char[] a;

public MyString(String s) {
this.a = s.toCharArray();
}

public MyString(char[] a) {
this.a = a;
}

public String toString() {
return new String(a);
}

public int length() {
return a.length;
}

public char charAt(int i) {
return a[i];
}
public static MyString valueOf(int i) {
int digits = (int)(Math.log10(i)+1);
char[] b = new char[digits];
for (int j = 0; j < digits; j++) {
b[j] = (char) (48 + i / 10);
i = i % 10;
if (i < 10) {
b[j + 1] = (char)(48 + i);
break;
}
}
MyString ms = new MyString(b);
return ms;
}
public static MyString valueOf(double d) {
char[] d1 = new char[digits];
//Take each digit of the number and enter it into the array
MyString ms = new MyString(d1);
return ms;

}

public static void main(String[] args) {

}

最佳答案

我假设您这样做是为了好玩……所以这就是我采用的方法。您已经有了 valueOf(int i),那么为什么不基本上重用该函数。只需取 double 并继续乘以 10,直到得到一个 int。跟踪小数点的位置,然后你基本上调用你的 valueOf(int i) 但也包括小数点。

我在运行你的代码时遇到了问题,所以我重新做了 valueOf(int i),然后创建了 valueOf(int i, int decimalSpot),传入 -1 或 0 作为小数点,然后它是一个整数值,不要使用一个小数位。

无论如何,这就是我想出的。已经晚了,所以可能不是最干净的代码,但应该给你一个概念证明。

public class MyString {

private char[] a;

public MyString(String s) {
this.a = s.toCharArray();
}

public MyString(char[] a) {
this.a = a;
}

public String toString() {
return new String(a);
}

public int length() {
return a.length;
}

public char charAt(int i) {
return a[i];
}

public static MyString valueOf(int i) {
return MyString.valueOf(i,-1);
}

public static MyString valueOf(double d) {
int decimalPlace = 0;

while (d != (int)d)
{
decimalPlace++;
d = d*10;
}

return MyString.valueOf((int)d,decimalPlace);
}

public static MyString valueOf(int i, int decimalSpot) {
int index=0;
int digits = (int)(Math.log10(i)+1);
int stringLength=digits;
if (decimalSpot == 0) decimalSpot=-1; // Don't return 1234. - just return 1234
if (decimalSpot != -1)
{
// Include an extra spot for the decimal
stringLength++;
}
char[] b = new char[stringLength];
for (int j = digits-1; j >= 0; j--) {
int power = (int) Math.pow(10,j);
int singleDigit = (int) Math.floor(i/power);
i = i - power*singleDigit;
b[index++] = (char) (48 + singleDigit);

if (decimalSpot==j)
{
b[index++] = '.';
}
}

MyString ms = new MyString(b);
return ms;
}

public static void main(String[] args) {
MyString ms = MyString.valueOf(12345);
System.out.println(ms);

ms = MyString.valueOf(12345.12313);
System.out.println(ms);
}

}

关于java - 在 Java 的 String 类中重新创建 valueOf(double d),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21153092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com