C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: 単精度浮動小数点型フィールドのDataBinding


(過去ログ 82 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■48942 / inTopicNo.1)  単精度浮動小数点型フィールドのDataBinding
  
□投稿者/ らーじ (1回)-(2010/04/17(Sat) 09:32:51)

分類:[VB.NET/VB2005 以降] 

単精度浮動小数点型のフィールドをテキストボックスにバインドさせるとうまくバインドされません。

Txt_Hoge.DataBindings.Add("Text", HogeDt, "Single_Field")

整数だとうまくいくんですが、要望により少数を入れたいと言われ変更しています。

よろしくお願いします。
引用返信 編集キー/
■48945 / inTopicNo.2)  Re[1]: 単精度浮動小数点型フィールドのDataBinding
□投稿者/ 魔界の仮面弁士 (1628回)-(2010/04/17(Sat) 10:56:38)
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")
の場合においても、それぞれ違う桁数として表示されます。
(もちろん書式を指定した場合は、その書式に応じた桁数で表示されます)
引用返信 編集キー/
■48965 / inTopicNo.3)  Re[2]: 単精度浮動小数点型フィールドのDataBinding
□投稿者/ らーじ (2回)-(2010/04/19(Mon) 10:47:51)
ありがとうございます。

Singleに変更したのですが、誤差が発生するんですね。
商品単価を入力する際に小数が必要ということなのでそこまで小数点以下十桁もいかないと思います。

Decimalにした方が良さそうなのでそちらに再度変更しようと思いますが、mdbのデータ型でDecimalだとどれになりますか?
長整数型?十進型にしたところ小数点以下は削除され整数となってしまいました。
引用返信 編集キー/
■48969 / inTopicNo.4)  Re[3]: 単精度浮動小数点型フィールドのDataBinding
□投稿者/ 魔界の仮面弁士 (1629回)-(2010/04/19(Mon) 11:45:25)
No48965 (らーじ さん) に返信
> mdbのデータ型でDecimalだとどれになりますか?
VB.NET の Decimal (10進型) に最も近いデータ型は、Jet では『DECIMAL』です。
(DECIMAL のエイリアスである NUMERIC や DEC でも同義)
日本語版 Access では「数値型 - 十進型」と表記されます。

ただし両者は完全に一致するわけではありません。

Jet の場合、最大/最小値は ±9999999999999999999999999999 ですが、
VB.NET のそれについては、 ±79228162514264337593543950335 です。

なお Jet の DECIMAL 型は ANSI 92 の SQL モードでしか使えません。
そのため、JET 4.0 以降が対象となります。


> 長整数型?十進型にしたところ小数点以下は削除され整数となってしまいました。
恐らく、小数点以下の桁数を 0 に設定してしまったのでしょう。
Jet の DECIMAL 型では、「精度」と「小数点以下桁数」を指定できます。

具体的には『CREATE TABLE tableName (columnName DECIMAL(10, 2))』のような形で指定でき、
この場合、±99999999.99 という数値が入力できます。
これらは、Access (2000 以降) のテーブル定義デザイナからも指定可能です。

ここでいう「精度」とは小数点を無視した全体の桁数(有効桁数とは微妙に異なる)を
表しており、精度を p、小数部桁数を s とした場合に、
1 ≦ p ≦ 28、かつ 0 ≦ s ≦ p という関係になっています。
すなわち、指定できる桁数は、(1,0) から (28,28) までです。


ちなみに VB.NET の Decimal は『12バイト整数値 + 符号情報 + 小数点位置(0〜28)』からなる
16バイトのデータ型で、最大/最小値は ±79228162514264337593543950335、
絶対値の最小値(0以外)は、0.0000000000000000000000000001 です。
引用返信 編集キー/
■48973 / inTopicNo.5)  Re[4]: 単精度浮動小数点型フィールドのDataBinding
□投稿者/ らーじ (3回)-(2010/04/19(Mon) 13:45:29)
上記のようバインドするデータのフォーマットを指定した場合、小数点以下がない(1や10)の場合でも指定した桁数まで表示されますが。これを、各値によって変えることは可能ですか?

"#.000"までとした場合
1→1.000
2.1→2.100
3.23→3.230

となりますが、余計なゼロをなくすことはできますか?

引用返信 編集キー/
■48976 / inTopicNo.6)  Re[5]: 単精度浮動小数点型フィールドのDataBinding
□投稿者/ Hongliang (605回)-(2010/04/19(Mon) 14:07:54)
小数点以下の書式指定子に、0 の代わりに # を使えば可能です。
// 1.0 と 1.00 の区別が無くなってしまいますけど。
引用返信 編集キー/
■48977 / inTopicNo.7)  Re[6]: 単精度浮動小数点型フィールドのDataBinding
□投稿者/ らーじ (4回)-(2010/04/19(Mon) 14:15:50)
No48976 (Hongliang さん) に返信
> 小数点以下の書式指定子に、0 の代わりに # を使えば可能です。
> // 1.0 と 1.00 の区別が無くなってしまいますけど。

試してみたところうまくいきました!
お手数をおかけしました。
引用返信 編集キー/
■48979 / inTopicNo.8)  Re[7]: 単精度浮動小数点型フィールドのDataBinding
□投稿者/ らーじ (5回)-(2010/04/19(Mon) 14:24:51)
解決済みにさせて頂きます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -