|
■No48942 (らーじ さん) に返信 > 整数だとうまくいくんですが、要望により少数を入れたいと言われ変更しています。 少数→小数
TextBox の代わりに、NumericUpDown はどうでしょうか。 DecimalPlaces で小数点以下の桁数を指定できますし、上限/下限値も設定できます。
コントロールを変更したくないのであれば、書式を指定してみてください。 Dim bnd As Binding = TextBox1.DataBindings.Add("Text", HogeDt, "Single_Field") bnd.FormatString = "#,0.000" bnd.FormattingEnabled = True のようにすれば、"1,234.000" などと表示されるようになります。
> 単精度浮動小数点型のフィールドをテキストボックスにバインドさせるとうまくバインドされません。 こういうときは、10 進型 (Decimal) を使った方が良いと思いますよ。
浮動小数点型は内部 2 進数で管理される都合上、0.125 などは誤差無く保持できますが、 0.001 などは誤差を含んだ値となります。Decimal であればその心配はありません。 # もちろん、1÷3 などといった有限桁の10進数で表現できない値では誤差が生じますが。
さらに言えば、Decimal の場合は小数点以下の桁数も保持されています。たとえば、 CDec("1.20") CDec("1.200") CDec("1.2000") は、いずれも数値としては同じ値と認識されるものの、 ToString メソッド / CStr 関数では、それぞれの桁数が維持されていますし、 Me.TextBox1.DataBindings.Add("Text", HogeDt, "Decimal_Field") の場合においても、それぞれ違う桁数として表示されます。 (もちろん書式を指定した場合は、その書式に応じた桁数で表示されます)
|