2017-07-29 7 views
0

私はこれのためにかなり全面的に見えましたが、実際には私が持っていた問題に向けられたような質問はありませんでしたので、以下のコード例私はこのフォーラムに投稿しました。C#:数式が機能していませんか?

こんにちは。私は最小数(3200)と最大数(4000)と3番目の数(3663)を持っています。私は3番目の数が最小数と最大数の間にあるような進展を得ようとしています。

私はより良い言葉でそれを説明します、私はそれらが始まるxpカウントを持つレベルがあります。私は次のレベルへの進歩を得ようとしています。

生の[C#の]:(3663 - 3200)/(4000 - 3200) * 100

コード:

int progression = (newXp - Convert.ToInt32(currentGrade["grade_xp_needed"]))/(Convert.ToInt32(newGrade["grade_xp_needed"]) - Convert.ToInt32(currentGrade["grade_xp_needed"])) * 100; 

なぜそれが0%に戻っているが、私はまだ300を持っているか、何かXPへ行きますか?私はPHPでそれを働いてきたし、それが57%

PHPコードを返します:あなたは正しい除算結果を得るために小数に値を変換する必要があり

$progression = round(($currentXp - $currentGrade->grade_xp_needed)/($nextGrade->grade_xp_needed - $currentGrade->grade_xp_needed) * 100, 1); 
+0

これは整数除算を行います。 '(3663 - 3200)* 100 /(4000 - 3200)'を使うことができます。 –

+0

数値を10進数または2進数に変換します。整数として343/800を分割することはできません。 –

答えて

0

を。次に、方程式全体の結果を整数に変換することができます。

int intにおける結果で割ったC#、 int
int progression = (int)((newXp - Convert.ToDecimal(currentGrade["grade_xp_needed"])) 
       /(Convert.ToDecimal(newGrade["grade_xp_needed"]) 
         - Convert.ToDecimal(currentGrade["grade_xp_needed"])) * 100); 

0

整数計算を実行しているので、間違った結果になっています。

分子または分母のいずれかを浮動小数点にすると動作します。

int progression = (int) ((1.0*(newXp - Convert.ToInt32(currentGrade["grade_xp_needed"])))/(Convert.ToInt32(newGrade["grade_xp_needed"]) - Convert.ToInt32(currentGrade["grade_xp_needed"])) * 100); 

希望します。

0

整数の代わりにdoubleを使用する必要があります。 サンプルコードと出力については、this linkを参照してください。

public static void Main() 
{ 
    double low = 3200; 
    double high = 4000; 
    double xp = 3663; 
    double progression = (xp - low)/(high - low) * 100; 
    Console.WriteLine(progression + "%"); 
} 
関連する問題