web-dev-qa-db-ja.com

フロートをテキストボックスタイプ「数値」に表示する

Textbox文字列のfloat値への変換、またはtype = "number"のTextboxで小数点を許可することに関しては多くの質問がありますが、float値の表示に関連するものが見つからないようです。タイプが「数値」に設定されたテキストボックス。

これまでのところ、type = "number"とstep = "0.01"のテキストボックスがあります。また、最小値は「0」です。これは次のように表示されます。

<asp:TextBox ID="TextBox1" runat="server" TextMode="Number" step="0.01" Width="140px" min="0"></asp:TextBox>

これはユーザー入力に対して正常に機能し、問題なくデータを変数/データベースに保存します。ただし、これと同じ値をユーザーに表示したい場合は、「0」も表示されず、何も表示されません。

だから私の質問は:値を「フロート」から取得し、それを「文字列」に変換し、それをTextbox.Textに適用して、値を表示するにはどうすればよいですか?

例:テキストボックスの値を「5」に設定すると、保存されて「5」が表示されますが、どちらの方法でも「5.5」または「5,5」を入力すると、表示されません。 「5.5」を表示するために必要です。

何か案は?

PS:それは金銭的価値を表すことになっています。また、可能であれば、Javascriptを必要としないソリューションが必要です。

7
Tiago Cachinho

Float 5.5は、5.5の実際の値ではありません( 。Net Float Reference を参照)。

金銭的価値にフロートを使用しないことを強くお勧めします。これらには10進型を使用することをお勧めします。

とはいえ、本当にフロートを使用したい場合は、DBから値を読み取るときに、次のようにします。

TextBox1.Text = ((decimal)myNum.ToString( "0.##" )).Tostring()

このソリューションを使用すると、「0.01」を希望するときにステッピングを残すことができます

P.S. Tiagoが指摘したように、あなたの文化と浮動小数点セパレーターの間に不一致がある可能性があります。小数にはドットが必要ですが、数値にコンマが含まれている可能性があります。この場合、次のように変換します。

decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," })

この質問から得た

2
KarmaEDV

any値を step 属性に設定します。

_ <input type="number" step="any"/>
_

Convert.ToSingle()または_float.Parse_を使用して、文字列をfloatに変換できます

_var value = Convert.ToSingle(TextBox1.Text, CultureInfo.InvariantCulture);
 //Or
 var value1 = float.Parse(TextBox1.Text, CultureInfo.InvariantCulture);
_

そして、インスタンスメソッドのToString("N")を使用して、floatを文字列に変換します。

_var str = floatNum.ToString("N"); // or N2 (2 digit decimal)
_
2
adatapost

さて、Textboxの型番号を調べたところ、HTML5のinput type = "number"が混乱していることがわかりました。一部の人にとってはあまり面白くないことは知っていますが、同じ問題にぶつかる1人か2人のプログラマーを知っています。

10進型の値が通貨を処理する正しい方法であるため、@ KarmaEDVがこの問題に対する最良の答えを持っています。ただし、@ AVDも正しかったので、「any」に設定すると、小数点以下の桁数で任意のサイズの値を受け入れるようになります。

その間、それは別の問題につながります。タイプ番号で入力を設定すると、そのボックスは数値またはDOT(ポイント)の値のみを受け取ります。英語表記を使用していない場合は、小数点として「、」(コンマ)を使用できます。ここでは、ボックスが「、」を受け入れ、値が保存されても有効な10進値であるという奇妙なことが起こりますが、値を(「、」で)変換すると、「」で文字列が作成されます。 、」。例:値5,5は、文字列「5,5」に文字通り含まれています。

「、」を受け入れないボックスなので、レンダリングされません。解決?
。ToString()。Replace( '、'、 '。');それと同じくらい簡単です。

もっと欲しい?それでも「5,5」と「、」(カンマ)が表示されます...問題が発生するのには理由があります...

よろしくお願いします。

2
Tiago Cachinho

考えられるベストプラクティスは、Text = "Number"を忘れて(上記で指定した問題のため)、Decimal.TryParse()を使用してユーザー入力を検証することです。米国の通貨の場合は、小数点以下2桁以下にすることをお勧めします。また、入力エラーの可能性をキャッチするために、小数点の右側に正確に2桁あることを確認することをお勧めします(1桁から小数点の右側が意図しない可能性があります)。

0
Bruce Allen

次のようなものを使用して、コードビハインドを手動でチェックインできます。

TextBox1.Text.ToString(CultureInfo.InvariantCulture);

使用することもできます

float.TryParse( TextBox1.Text) 

値がfloatであるかどうか、または通常の文字列として扱うことができるかどうかを確認します。

0
Johan