場合、私は、コードをコピーすることは効率的ではないことに同意します。だからこそ、人々は関数を発明したのです! フォーマットを関数に単純にラップするのはどうですか? 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は彼のコメントでもint
もlong
もBigInteger
のような外部ライブラリを使用するか、double
に切り替えることができます。数字が大きくなると精度が落ちます。 (たとえば、1000000000000000.0 + 1は1000000000000000.0に等しい場合があります)。後者を選択した場合、範囲(0.0,1.0)の数値を処理する関数を変更する必要があります。log10は負です。
どのような目的のために変数をチェックしているのか、何を試したのかは明確ではありません。 [良い質問をする方法](https://stackoverflow.com/help/how-to-ask)ページを見て、質問を編集してください。 – Withnail
私は彼らが価値よりも大きいかどうかをチェックしています。たとえば、1,000を超える場合は1kを表示します。 1,000,000を超える場合は、1m ...などを表示してください。 – aLongBoat
よろしくお願いします。あなたはあなたの質問を更新し、それをしようとしたコードを更新するべきです。 – Withnail