2017-03-20 13 views
1

私はまだC#を学んでいます。私は単純なクリッカーゲームを作っています。私の問題は、いくつかの数字が10000000に達すると、1E + 07(たとえば)と表示され始めるということです。ポイントは、10mln以上(blnなど)として表示させたいということです。そして私がそれをやろうとするたびに、私は多くの誤りを抱えています。どうすればいいですか?[C#Unity] 1E + 07として表示10mln

using UnityEngine; 
using System.Collections; 
using System; 

public class ping : MonoBehaviour { 

public UnityEngine.UI.Text gpc; 
public UnityEngine.UI.Text GoldDisplay; 
public static float gold = 0.00f; 

public static long toInt64() 
{ 

    return Convert.ToInt64(gold); 
} 
public int goldperclick = 1; 


void Update(){ 
    GoldDisplay.text = "Ping: " + gold; 
    gpc.text = goldperclick + "ping/click"; 
} 

public void Clicked(){ 
    gold += goldperclick; 
} 

} 

答えて

2

おそらくあなたは、ゴールドのような、独自のタイプを実装し、それ

public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine(new Gold(10000));   //10000 
     Console.WriteLine(new Gold(100000));  //100000 
     Console.WriteLine(new Gold(1000000));  //1 mln. 
     Console.WriteLine(new Gold(10000000));  //10 mln. 
     Console.WriteLine(new Gold(100000000));  //100 mln. 
     Console.WriteLine(new Gold(1000000000)); //1 bln. 
     Console.WriteLine(new Gold(1500000000)); //1.5 bln. 
    } 
} 

public class Gold 
{ 
    public decimal Value {get;set;} 

    public Gold(decimal value) 
    { 
     Value = value; 
    } 

    public override string ToString() 
    { 
     if(Value>=1000000000) return $"{Value/1000000000} bln."; 
     if(Value>=1000000) return $"{Value/1000000} mln."; 
     return Value.ToString(); 
    } 
} 

また、あなたが彼らの最大値と精度に係る賢く使う数値型を選択しなければならないためのToString()メソッドをオーバーライドする必要があります。

Here大量の書式については、さらに詳しい情報があります。

+0

私は、このクラスが簡単に 'FormattedNumber'になり、大きな数字を扱うクリッカーゲームの中の何にでも使うことができると付け加えたいと思います。 – levelonehuman

+0

ありがとうございます!私はそれを使用しようとします。 – Bajor

-1

整数だけを扱う場合は、floatの代わりにlongを使用する方がよいでしょう。 1,234,567,901あなたのフロートにのみ表示1,234,568,000の値とそう - -

Aはlong又は(Int64型)9,223,372,036,854,775,807までの値を保持することができ、フロートのみ精度の7桁を提供するが、これらの値の一つ一つが表示されますを締結しましたこれはあなたが期待しているものではないかもしれません(これは、float.MaxValue.ToString("0")を印刷することによっても見られます。

小数点を使用する必要がある場合は、doubleを使用して15〜16桁の精度を使用することもできます。

+0

私はそれをそうしたいと思っていましたが、私は長い間私は金のフォームのflaotを変更しているとき私はエラーがある:暗黙のうちにタイプ 'float'を 'long'に変換することはできません。だからおそらく私はそれを間違っている。 – Bajor

+0

@Bajor 'ping.gold'への参照も' long'でも更新する必要があります。 –

+0

まだこのエラーがあります: パブリッククラスItemManager:MonoBehaviour { public UnityEngine.UI.Text itemInfo; 公開ping ping; 公的なロングコスト; public int tickValue; public long count; パブリック文字列itemName; プライベートlong baseCost; void Start(){ baseCost = cost;} void update(){ itemInfo.text = itemName + "\ nKoszt:" +コスト+ "\ nPing:" + tickValue + "/ s";} public void PurchasedItem(){ if(ping.gold> = cost){ ping.gold - =コスト; カウント+ = 1; コスト= Mathf.Round(baseCost * Mathf.Pow(1.15f、count)); // < - エラー}} – Bajor

関連する問題