2017-11-18 2 views
2

私は統一とC#の完全なnewbです。私は最初のモバイルインクリメンタルゲームを作ろうとしています。私は変数を(例えば)1000 >>> 1kからフォーマットする方法を知っていますが、私は10億まで上がることができるいくつかの変数を持っています+したがって、すべての変数の値を10億まで別々にチェックする必要があると想像してください。私はnewbであるので、私はそれについて行く方法がわからない、多分ループや何かのために?Unityフォーマットの複数の数字

EDIT:xが特定の値より大きいかどうかを確認しています。たとえば、1,000を超える場合は1kを表示します。もし1,000,000より大きいなら、1mを表示するなど...

これは、xが1000より大きいかどうかを調べるための私の現在のコードですが、他の値に対してこれを貼り付けるのは非常に効率的です。

ので(totalCash> 1000)

{ 
     totalCashk = totalCash/1000; 
     totalCashTxt.text = "$" + totalCashk.ToString("F1") + "k"; 
    } 
+0

どのような目的のために変数をチェックしているのか、何を試したのかは明確ではありません。 [良い質問をする方法](https://stackoverflow.com/help/how-to-ask)ページを見て、質問を編集してください。 – Withnail

+0

私は彼らが価値よりも大きいかどうかをチェックしています。たとえば、1,000を超える場合は1kを表示します。 1,000,000を超える場合は、1m ...などを表示してください。 – aLongBoat

+0

よろしくお願いします。あなたはあなたの質問を更新し、それをしようとしたコードを更新するべきです。 – Withnail

答えて

1

場合、私は、コードをコピーすることは効率的ではないことに同意します。だからこそ、人々は関数を発明したのです! フォーマットを関数に単純にラップするのはどうですか? prettyCurrency

だから、あなたは、単に書くことができます。また

totalCashTxt.text = prettyCurrency(totalCashk); 

を、代わりに、IFSの書き込みトンのあなたは、桁数を決定するために10の拠点を持つ対数でこのケースを扱うことができます。以下、純粋なC#での例:

using System.IO; 
using System; 

class Program 
{ 
    // Very simple example, gonna throw exception for numbers bigger than 10^12 
    static readonly string[] suffixes = {"", "k", "M", "G"}; 
    static string prettyCurrency(long cash, string prefix="$") 
    { 
     int k; 
     if(cash == 0) 
      k = 0; // log10 of 0 is not valid 
     else 
      k = (int)(Math.Log10(cash)/3); // get number of digits and divide by 3 
     var dividor = Math.Pow(10,k*3); // actual number we print 
     var text = prefix + (cash/dividor).ToString("F1") + suffixes[k]; 
     return text; 
    } 

    static void Main() 
    { 
     Console.WriteLine(prettyCurrency(0)); 
     Console.WriteLine(prettyCurrency(333)); 
     Console.WriteLine(prettyCurrency(3145)); 
     Console.WriteLine(prettyCurrency(314512455)); 
     Console.WriteLine(prettyCurrency(31451242545)); 
    } 
} 

OUTPUT:

$0.0 
$333.0 
$3.1k 
$314.5M 
$31.5G 

また、あなたがそのToString()過負荷として、この機能を実装する新しいタイプを、導入を考えるかもしれません。

編集: 入力が0で忘れましたが、修正されました。実際には、@ Draco18sは彼のコメントでもintlongBigIntegerのような外部ライブラリを使用するか、doubleに切り替えることができます。数字が大きくなると精度が落ちます。 (たとえば、1000000000000000.0 + 1は1000000000000000.0に等しい場合があります)。後者を選択した場合、範囲(0.0,1.0)の数値を処理する関数を変更する必要があります。log10は負です。

+0

私はそれを働かせることができたいくつかの微調整をして、ありがとうございました! – aLongBoat

関連する問題