4

どんな質問もばかげた質問ではないということわざに頼るつもりですが、少しばかげた質問があります。

編集:

重複を検索するときに出くわしなかったタイトルを使用していますが、この質問はここですでに数回尋ねられ、回答されているようです。関連する投稿は次のとおりです。

  1. 科学表記法を使用しない double から文字列への変換
  2. double を 10 の累乗表現なしで string に変換する方法 (E-05)
  3. 答えのある場所 (Jon Skeet): http://www.yoda.arachsys.com/csharp/DoubleConverter.cs

元の質問:

などのかなり小さい数値を時々保存するアプリがあり0.000023425ます。TextBoxこれらの数値は、ユーザーが編集できるようにコントロールに読み込まれます。次の不自然な例は、私の問題を示しています。

Dim number As Double = 0.000023425
someTextBox.Text = number.ToString() ' Shows "2.3425E-05"

前述のように、表示されるテキストは です2.3425E-05。これは、ユーザーにとって直感的に理解できるものではありません。さらに、より正確な数値 (小数点以下 19 桁まで) を使用しています。出力を固定小数点にしたい。もちろん、私は簡単かつきれいに行うことができます:

number.ToString("F20") ' Shows "0.00002342500000000000"

しかし、その後、厄介な数のゼロが残ります。したがって、それを修正するには、次のようにします。

number.ToString("#,##0.####################") ' Shows "0.000023425"

これは私が欲しいものですが、その巨大な醜いフォーマット文字列をそこに置くよりも良い方法はありますか? わかりました、それほど醜いわけではありませんが、確かに別の方法がありますよね? 私の目標は、DB に保存されている生の値をわかりやすい方法で表示することであり、数値の形式を強制する必要はまったくありません。

ありがとう!

アップデート

たぶん、私は投稿で少し言いすぎました。Decimalいくつかの実験の後、基になるデータ型を変更して問題を解決することがわかりました。

Dim number As Decimal = 0.000023425
someTextBox.Text = number.ToString() ' Shows "0.000023425" instead of "2.3425E-05"

Doubles が正常に表示されるほど正確ではないようですね。

編集

Double 値を Decimal としてキャストしてから aを実行するだけで、望ましい効果が得られる投稿を見つけました(賛成票はありませんが)。.ToString()私がそれをしたくない理由はありますか?おそらく、へのキャストは(無視できる量ですが)Decimalとは異なる値で終了する可能性があるため、おそらくフォーマット文字列の方が安全です。Double#,##0.#################...

4

1 に答える 1

3

フォーマット文字列を定数にして (たとえば、リソース ファイルで)、名前で使用します。醜いフォーマットを見ることを避け、フォーマット内のコントロールからコントロールへの一貫性を獲得します (つまり、気が変わったら、すべてのコントロールが新しい外観になります)。

別の方法として (または組み合わせて)、テキスト ボックスからカスタム コントロールを派生させ、より簡単な構文で使用したいさまざまな書式設定文字列を呼び出すプロパティを設定します。

いずれにせよ、あなたの目標は自分自身を繰り返さないことです...構成を1か所に配置することで、最終的に入力ミスを避け、奇妙なフォーマットのバグを追跡する必要がなくなります。

すべての書式設定と解析の要件をカプセル化する「パーセント」と「通貨」のテキスト コントロールを作成することで、同様のことを行います。それ以外の場合は、テキスト コントロールと同じように機能します。

于 2009-10-21T19:22:47.980 に答える