2

以前インタビューで聞かれたのですが、よくわかりませんでした。一度にすべてをキャストすることは許可されていなかったので、次のアイデアは文字列変換をポイントまで実行することでしたが、私にインタビューした人は、次のようなことをしたいと言いました:

1 = 1 
12 = 1 * 10 + 2 
123 = 12 * 10 + 3 
1234 = 123 * 10 + 4

入力はconvert "1234.567" to a float ie. 1234.567

正直なところ、彼がどのようにそれを行うつもりだったのかわかりません。また、各文字を解析するために循環するだけだったことを示すのに十分なコードを生成できていません。

for(int i = 0; i < str.length(); i++){
        if(!str.charAt(i).equals(".")){
            fp = Float.parseFloat("" + str.charAt(i));
4

6 に答える 6

3

このようなもの(注:エラーチェックなし):

public float parseFloatFromString(final String input)
{
    boolean seenDot = false;
    float divisor = 1.0f;
    char c;
    float ret = 0.0f;

    for (int i = 0; i < input.length(); i++) {
        c = input.charAt(i);
        if (c == '.') {
            seenDot = true;
            continue;
        }
        ret *= 10.0f;
        ret += (float) (c - '0');
        if (seenDot)
            divisor *= 10.0f;
    }

    ret /= divisor;
    return ret;
}

もちろん、 がfloat10 進数として表現できるものには制限がありますが、最終的にはそれほど多くはありません。特にこの場合、常に乗算/加算を行っており、最後の除算については話さないようにしましょう (除数が 1 でない場合)。

上記に関する興味深い注意事項: 実際、これは異なるプラットフォームでは異なる結果をもたらす可能性があるようです... 最新のプラットフォーム上の最新の JVM は、浮動小数点に対して内部のより高精度の中間表現を使用する場合があります。どこでも同じ結果が必要な場合はstrictfp、メソッド宣言に修飾子を追加する必要があります。

public strictfp float parseFloatFromString(final String input)

詳細はこちら

于 2014-02-26T01:56:07.877 に答える
0

パッケージcom.nanofaroque.float2String;

public class Float2String {

public static void main(String[] args) {
    String input="1234.56";
    String str=".";
    float result=0;
    int j=3;//this is used for multiply by 10^j

    for(int i=0;i<input.length();i++){
        if (input.charAt(i)!=str.charAt(0)){
            char m=input.charAt(i);//Convert String to Character
            float x=(float) input.charAt(i);//Getting the ASCI value
            x=x-48;//Now x converted to the real float value
            float y=(float) (x* (Math.pow(10, j)));//Multiplication Operation for conversion
            result=result+y;
            j=j-1;
                        }
        else{
            System.out.println("Welcome to my World");// to make the loop work..You can change it if you want
        }
    }
    System.out.println("Result after the conversion:"+result);
}

}

于 2014-02-26T03:59:22.990 に答える
0

私はあなたの意味が理解できませんか?'123456' のような整数を '12345 * 10 + 6' に変換するという意味でしたか? これを行うには、'substring' メソッドを使用してください。

于 2014-02-26T01:54:13.140 に答える
0

文字列をフロートに変換するには、私は個人的にこれを使用します:

Float.parseFloat("1234.567");

男が望んでいたことについては、これが私のやり方です:

String num = "1234.567";

int dotLocation = num.indexOf(".");
int wholeNum = Integer.parseInt(num.substring(0, dotLocation)); 

String answer = (wholeNum / 10) + " * 10 + " + (wholeNum % 10); 

「。」の位置を見つけます。文字列で、元の文字列の部分文字列を取得して整数を抽出します。これにより、1234 が得られます。

次に、1234 = 123 * 10 + 4 になるようにフォーマットする必要があります。

数学的には、1234 を 10 で割ると、商は 123 になり、余りは 4 になります。これにより、男が求めていた答えが得られます。

于 2014-02-26T02:41:16.193 に答える