2017-01-22 7 views
2

私は以下の関数を使ってデータベースから整数を取得しますが、関数内で数値が正しく送信されていることを確認しました。私は文字列に変換し、その数に応じて特定の方法で返したいと思います。それは<数字で10000を正常に動作いくつかの奇妙な理由で文字列に文字を追加しても期待通りの結果が得られません

が、その時点からその上にちょうど

機能がある奇妙な結果を示しています

public static String numberTransformation(int number){ 
    String str=String.valueOf(number); 
    System.out.println("#################### NUMBER BEFORE TRANSFORMATION" + str); 
    if(number<=999){ 
     return str; 
    } 
    else if(number>999 && number<1099){ 
     return "1k"; 
    } 
    else if(number>1099 && number<=9999){ 
     return str.charAt(0) + "." + str.charAt(1) + "k"; 
    } 
    else if (number>9999 && number<=99999){ 
     return str.charAt(0) + str.charAt(1) + "k"; 
    } 
    else if (number>99999 && number<=999999){ 
     return str.charAt(0) + str.charAt(1) + str.charAt(2) + "k"; 
    } 
    return ""; 
} 

一部のテストと結果:

Number is 999 -> result is 999 (expected) 
Number is 2532 -> result is 2.5k (expected) 
Number is 10000 -> result is 97k (not expected) 
Number is 100000 -> result is 145k (not expected) 

どうしたのですか?それは10000より大きい数字と何か関係がありますか?

+0

この重複は、あなたがすでに質問に対する回答を知っている場合にのみ有効です。 OPは文字列を連結して文字列を連結していないと仮定していたので、文字の追加に関する質問を探すのに十分な知識はありませんでした。この質問を他のものにリンクすることは有益ですが、この質問を削除することはおそらくこの質問の近くの目標ですが、文字列の連結と文字の追加を混同しているユーザーは、 。 – Eran

答えて

9
return str.charAt(0) + str.charAt(1) + "k"; 

strの第一および第二の文字を連結していない、それは2 char秒の数値を追加します。

「1」(49)の数値と「0」(48)の数値が追加され、「10k」ではなく97 +「k」が得られます。代わり

、使用:String連結を行うために

return "" + str.charAt(0) + str.charAt(1) + "k"; 

又は

return str.substring(0,2) + "k"; 

return "" + str.charAt(0) + str.charAt(1) + str.charAt(2) + "k"; 

か:に変更する必要があります

return str.charAt(0) + str.charAt(1) + str.charAt(2) + "k"; 

同じことがのために行く代わりに

return str.substring(0,3) + "k"; 

、あなたはStringBuilderの代わりStringを使用することができます連結。

+0

ちょうどそれを試して、完璧に私の友人を動作させます。私はcharAtの周りの詳細を読む必要があります。すばらしい、非常に完全な応答をありがとう! – Vaggouras

+0

@Vaggourasようこそ。 – Eran

関連する問題