2016-12-14 4 views
-1
Boolean Multiplier; 
double Number; 
double Value; 
string Text; 
Text = (Value * (1 + (Convert.ToInt32(Multiplier)/2)).ToString(".0##"); 

これは現在のコードです。偽です。ブール値に依存する要素を選択するC#

しかし、この人は部門なしで働いていたにもかかわらず、うまく表示されないフロートと関係していると思います。だから、私は2つの値を持つenumのようなものを使うことができ、ブール値が真であるか偽であるかに依存して1つが選択されることを尋ねたかった。私はかなり新しいので、他の方法だけでなく、側面に10進数の書式設定に関するアドバイスをいただければ幸いです。これはどこかにすでに文書化されている場合は、すみませんが、私はそれを見つけませんでした:(

+1

[バリュー* =マルチプライヤー]ステートメントを使用することもできます([ternary](https://msdn.microsoft.com/en-gb/library/ty67wk28.aspx) 1.5:1; ' ' Text = Value.ToString( "。0 ##"); '代わりに同じロジックを使ってifを使う –

+0

ありがとう、これは私が欲しかったものです。あなたはチェックマークをつけたが悲しいことにそのコメント:/ – Firro

+0

それは本当に答えに値しませんでしたので、私は気にしませんでした:P –

答えて

1

を。。int型(または他のタイプ)これは、変換ルールおよび/またはドキュメントを検索する暗黙知のいずれかに依存しているために

あなたの要件は次のとおりです。

テキスト値の乗算でありますMultiplierがtrueの場合は1.5、Multiplierがfalseの場合はValueが同じになり、文字列に変換されます。

はなぜちょうど標準の三項演算子を使用して、それをこのようにコーディングしない:

Text = (Multiplier ? Value * 1.5 : Value).ToString(".0##"); 

それとも、重複Valueへの参照を好きではない場合は、いくつかの変種。

2つの可能な結果があり、数値以外の型を数値型に変換するルールに依存せず、現在のコードが行う整数除算トラップには該当しません。

+0

なぜboolから変換してはならないのですか?https://msdn.microsoft.com/en-us/library/9y5sh618(v=vs.110).aspxはそれについて何も言いません。 – mybirthname

+0

@mybirthname私が指摘していることは、あなたが長い間プログラミングしたり、文書化された動作を覚えていない限り、 'true == 1'と' false == 0'ということは明らかではありません。さらに、実際に起こっていることを理解するために、式にそれを適用する必要があります。最初にコードを読んでいる人は、それが何をしているのかを考えなければなりません(それは間違っているかもしれません)。 _Good_コードは、他の人に読んだり理解したり説明したりするのが簡単です。 –

+0

補足として、私はブール値で注文するときに同じ議論をする - 私はそれが明示的になるように最初に来ることを考える必要はない(例えば、 'OrderBy(o => o.isValid?0:1) 'と' OrderBy(o =>!o.isValid')trueとfalseには自然な順序はありません。それはコンピュータサイエンスが何年も定義した通りです。 –

1

あなただけifステートメントを使用することができます

あなたは(私見)ブール値からの変換を使用しないでください
double val = Value; 
if(Multiplier) 
{ 
    val = val * 1.5; 
} 
Text = val.ToString(".0##"); 
+0

私は同じ方法に多くの乗数を追加することにしました。フォーミュラ私はifとelsesの巣を作る必要があります。 – Firro

+0

@Firroのネスト '?'は、 'if'をネストして読むのがはるかに難しいです。複数の倍数を追加した場合、受け入れられる答えのコードは 'Multiplier? 1.5:(Multiplier2?2:(Multiplier3?3:1)) 'であり、これは' Value'を冗長に使用しないことです。 'if'を使うと' else if'を使うことができますので、実際にネストする必要はありません。 – clcto

+0

しかし、パフォーマンスに重いifs入れ子ですか? – Firro