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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■54136  Re[3]: VB6.0 Int関数を使用しての切り捨て処理について
□投稿者/ 魔界の仮面弁士 -(2010/10/06(Wed) 10:28:40)
    2010/10/06(Wed) 15:07:52 編集(投稿者)

    No54131 (ペケ さん) に返信
    >>dobule型を使わずに、decimal型を使えば0.085Dという値になります。
    >>VB6は、decimal型を指定できないのでCurrency型ですね。
    > vb.netではdecimal型を使っていたんですが、なるほど、VB6はCurrency型を
    > 使うのですね。

    VB6 でも Decimal(10 進型) は利用できます。ただし As Decimal ではなく、
     Dim v As Variant
     v = CDec("0.085")
    のように、Variant 型の変数として管理する事になります。

    ちなみに VB6 の Decimal の精度は、VB.NET のそれと同一です。具体的には
    小数点位置が 0〜28 の間で可変であり、小数点を除いた数値としては
    ±79228162514264337593543950335 の範囲をとるという型になっています。


    一方 Currency(通貨型) は、Decimal とは違って Variant の一種としてではなく、
    プリミティブ型として用意されている点が強みです。
    Currency の場合、小数点は 4 桁固定、整数部は最大 15 桁となっており、
    値の範囲は -922337203685477.5808 〜 +922337203685477.5807 です。


    多くの場合、整数部の桁数は Currency で充分だと思いますので、
    小数部の桁数が 4 桁で足りるかどうかで使い分けると良いでしょう。

    ただし桁数的には Currency で足りていても、意図的に Decimal が
    採用されるケースもあります。それは、「演算結果の型」によるものです。

    先のサンプルにもコメントで書いていますが、たとえば、
     Debug.Print TypeName( value1 / value2 )
    などを実行した場合、value1 や 2 の型が Currency であったとしても、
    除算結果は Currency 型にはなりません。通常は Double になります。

    実は「/ 演算子」での除算結果が Double 以外の型になるのは、
    Single の除算(結果もSingle)と Decimal の除算(結果も Decimal)だけなのです。
    # 分かりにくいのですが、いちおう VB6 のヘルプにも書いてあったりします。


    その意味で、除算処理が含まれる場合には、Currency ではなく
    あえて Decimal が採用されるケースもあります。


    あるいは、「/ 演算子」の代わりに「* 演算子」で処理するという手法もあります。
    除算とは異なり、乗算では基本的に元の型が維持されるため、
    たとえば「10で割る」処理を「0.1をかける」に書き換えてやれば、
    Currency 型のままで演算する事が可能となります。
記事No.54121 のレス /過去ログ91より / 関連記事表示
削除チェック/

■64072  Re[4]: 2つのチェックボックス付きTreeView
□投稿者/ にゃあ -(2012/11/07(Wed) 00:45:32)
    No64071 (shu さん) に返信
    > 既存の動作による影響であれば既存の状態を使用しないのはどうでしょう?

    選択状態を無視するということにすると、やりたい機能の一部を諦めなくてはなりませんので、なんとかしたいと思ったのですが・・・。
    そうですね、チェックボックス追加まではできているので、さらにもうひとつチェックボックスを追加して選択状態の代わりにするなど、考慮してみます。

    OwnerDrawTextでは表示色や文字の大きさを多少変える程度の事しかできないもの、と納得するしかなさそうですね。
    (似た様なことをしようとして、同じ問題にぶつかっている例が。 http://social.msdn.microsoft.com/Forums/ja-JP/netfxgeneralja/thread/d40ad1e6-6563-4c46-b4f3-2922338e6624 )
    文字の表示位置をずらすことはできるが、クリック判定の位置はずらせない。
    そういうものだとして、仕様の再検討をします。

    ありがとうございました。
記事No.64042 のレス / END /過去ログ107より / 関連記事表示
削除チェック/

■81161  Re[3]: Graphics.DrawLineでのオーバーフローについて
□投稿者/ 魔界の仮面弁士 -(2016/08/31(Wed) 10:43:40)
    No81148 (真田昌幸 さん) に返信
    > >>Integer.MaxValueの箇所を100とかにすると正常に動作することから、Integer.MaxValueで
    > >>オーバーフローが発生しているのは間違いないのですが、DrawLineの引数はInteger型なのに
    > >>何故という疑問があります。
    >>引数がInteger型だからといって、あらゆるメソッドがIntegerの全値域を受け入れなければならないってこともないでしょう。
    >>例えばTCPのポート番号を引数に取るなら、型としてはIntegerを使うでしょうが有効なのは0〜65535だけです。
    > 
    > integerはVB2002以降は32bitかと
    > 16bitなのはVB6までとVBA
    
    VBA は関係無いですよね。
    
    0〜65535 を表せる最小の型は System.UInt16 ですが、
    そのための引数を System.Int32 にするのは珍しいことではありません。
    
    たとえば日付型で、13月や32日を指定できないのは明確ですが、
    DateTime の Month プロパティは、Byte ではなく Integer ですよね。
    
    
    TCP のポート番号は、
     0〜1023 :ウェルノウンポート番号
     〜49151 :登録済みポート番号
     〜65535 :動的・プライベート ポート番号
    であり、この範囲外を認めないというだけの話です。
    
    
    
       【符号なし整数型】
    (a) 0〜255
    (b) 0〜65535
    (c) 0〜4294967295
    (d) 0〜18446744073709551615
    
    
       【符号付き整数型】
    (e)                -128〜127
    (f)              -32768〜32767
    (g)         -2147483648〜2147483647
    (h)-9223372036854775808〜9223372036854775807
    
    ----------------------------
         .NET     VB.NET    VBA         VARIANT
    (a)  Byte     Byte      Byte        VT_UI1 (17)
    (b)  UInt16   UShort    非サポート  VT_UI2 (18)
    (c)  UInt32   UInteger  非サポート  VT_UI4 (19)
    (d)  UInt64   ULong     非サポート  VT_UI8 (21)
    (e)  SByte    SByte     非サポート  VT_I1  (16)
    (f)  Int16    Short     Integer     VT_I2  (2)
    (g)  Int32    Integer   Long        VT_I4  (3)
    (h)  Int64    Long      LongLong    VT_I8  (20)
記事No.81145 のレス /過去ログ138より / 関連記事表示
削除チェック/

■92233  Re[1]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ furu -(2019/09/04(Wed) 10:45:37)
    No92232 (YAMA さん) に返信
    CD-Rなんだから、追記しかできないと思う。
記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92234  Re[2]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ YAMA -(2019/09/04(Wed) 11:18:05)
    2019/09/04(Wed) 11:26:57 編集(投稿者)

    No92233 (furu さん) に返信
    > ■No92232 (YAMA さん) に返信
    > CD-Rなんだから、追記しかできないと思う。
    おっしゃる通り、「追記」しかできないですが、
    同名のデータが書き込まれる場合は元あったデータを「読めなくする」処理→別のエリアに新規に書き込みする(使用できるディスク容量はどんどん減っていく)ということをディスク内でしてくれてるのではないでしょうか?

    ちなみにフォルダではなくルート階層に同名のファイルで内容だけ変更したものを何度も書き込むことはできることは確認できております。
    なので質問の趣旨としては「同名フォルダはなぜダメなのか?回避策はないのか?」という点でお聞きした次第です。

    今回の書き込み操作を
    Windowsの標準機能でエクスプローラ上にドラッグして「書き込む準備ができました」状態→書き込みを行うと上記の目的としているフォルダ構造で完成します。
    ※空ディスクを初回入れたときに選択肢がでますが「USBのように使うモード」のほうは選択していません。
    市販のCD-R書き込みソフトでCDを閉じずに同様の書き込みを行っても完成しました。



記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■94505  整数==>2進文字列に変換
□投稿者/ otu -(2020/04/16(Thu) 03:00:52)

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

    環境:VB2017,.NET4.7.2

    整数を2進文字列に変換したいのですが、判らない事があるので、ご指導下さい。
    教えてもらいたいのは以下のコードに記載した★印の箇所です。

    ★(1):Int64型のMinValueをリテラルで宣言するとコンパイルエラーになります。
    Long.MinValueやInt64.MinValueとすると大丈夫です。
    リテラル表記ではエラーとなる仕様なのでしょうか?

    ★(2):SByte.MinValue(-128)をConvert.ToStringで2進文字列に変換すると
    「1111111110000000」になり2バイトで返却されます。
    自分の予想では最上位の符号ビットだけが立った1バイト「10000000」が返却される
    と思っていたのですが違うのでしょうか?SByteって「-128〜127」の1バイトですよね?

    ★(3):UInt64型はConvert.ToStringでコンパイルエラーとなります。

    以上、ご指導よろしくお願いします。

    PS.その他の整数型も試したので変数名がv1からv15で途中欠番になっています。

    Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
    Dim v1 As SByte = SByte.MinValue 
    Dim v15 As UInt64 = UInt64.MinValue
    Dim v16 As UInt64 = UInt64.MaxValue
    'Dim v17 As Int64 = -9223372036854775808L ★(1)コンパイルエラー(オーバーフロー)
    Debug.WriteLine(Convert.ToString(v1, 2)) '1111111110000000 ★(2)
    'Debug.WriteLine(Convert.ToString(v15, 2)) ★(3)コンパイルエラー(オーバーロードなし)
    'Debug.WriteLine(Convert.ToString(v16, 2)) ★(3)コンパイルエラー(オーバーロードなし)
    End Sub
親記事 /過去ログ163より / 関連記事表示
削除チェック/

■94506  Re[1]: 整数==>2進文字列に変換
□投稿者/ Azulean -(2020/04/16(Thu) 06:06:38)
    No94505 (otu さん) に返信
    > ★(1):Int64型のMinValueをリテラルで宣言するとコンパイルエラーになります。
    > Long.MinValueやInt64.MinValueとすると大丈夫です。
    > リテラル表記ではエラーとなる仕様なのでしょうか?
    詳しくないですが、仕様らしいです。
    https://stackoverflow.com/questions/49113815/overflow-compiler-error-with-9223372036854775808l

    符号のない、正の整数として解釈した後、-1 倍するみたいな解釈をするらしいです。
    そのため、「9223372036854775808」がオーバーフローするのでコンパイルエラーとなるようです。
    Int64.MinValue で十分じゃないでしょうか?


    > ★(2):SByte.MinValue(-128)をConvert.ToStringで2進文字列に変換すると
    > 「1111111110000000」になり2バイトで返却されます。
    > 自分の予想では最上位の符号ビットだけが立った1バイト「10000000」が返却される
    > と思っていたのですが違うのでしょうか?SByteって「-128〜127」の1バイトですよね?
    Convert.ToString の一覧を確認してください。
    https://docs.microsoft.com/ja-jp/dotnet/api/system.convert.tostring?view=netframework-4.8

    SByte と Int32 をもらう引数は定義されていないので、Int16 と Int32 を渡すものを呼び出しているのでしょう。
    本当に SByte で実現したいなら自分で書くか、コンパイルオプションのオーバーフローチェックを外してから CByte で Byte 型で処理するか…?
    (後者はお勧めできませんが)

    >
    > ★(3):UInt64型はConvert.ToStringでコンパイルエラーとなります。
    前述の URL を確認してみてください。
    存在しないからです。必要なら自作するとか…。
記事No.94505 のレス /過去ログ163より / 関連記事表示
削除チェック/

■94507  Re[2]: 整数==>2進文字列に変換
□投稿者/ otu -(2020/04/16(Thu) 08:56:25)
    No94506 (Azulean さん) に返信
    ご指導、感謝致します。

    >>★(1):Int64型のMinValueをリテラルで宣言するとコンパイルエラーになります。
    >>Long.MinValueやInt64.MinValueとすると大丈夫です。
    >>リテラル表記ではエラーとなる仕様なのでしょうか?
    > 詳しくないですが、仕様らしいです。
    > https://stackoverflow.com/questions/49113815/overflow-compiler-error-with-9223372036854775808l
    >
    > 符号のない、正の整数として解釈した後、-1 倍するみたいな解釈をするらしいです。
    > そのため、「9223372036854775808」がオーバーフローするのでコンパイルエラーとなるようです。
    > Int64.MinValue で十分じゃないでしょうか?

    添付URLを読んで納得しました。そこに書かれてあるように16進や2進表記すればOKでした。
    Dim v17 As Int64 = &H8000000000000000L
    Dim v18 As Int64 = 1L << 63
    Dim v19 As Int64 = &B10000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000L


    >
    >>★(2):SByte.MinValue(-128)をConvert.ToStringで2進文字列に変換すると
    >>「1111111110000000」になり2バイトで返却されます。
    >>自分の予想では最上位の符号ビットだけが立った1バイト「10000000」が返却される
    >>と思っていたのですが違うのでしょうか?SByteって「-128〜127」の1バイトですよね?
    > Convert.ToString の一覧を確認してください。
    > https://docs.microsoft.com/ja-jp/dotnet/api/system.convert.tostring?view=netframework-4.8
    >
    > SByte と Int32 をもらう引数は定義されていないので、Int16 と Int32 を渡すものを呼び出しているのでしょう。
    > 本当に SByte で実現したいなら自分で書くか、コンパイルオプションのオーバーフローチェックを外してから CByte で Byte 型で処理するか…?
    > (後者はお勧めできませんが)
    これもAzulean さんの説明で納得しました。
    多分、暗黙でInt16にキャストされていると思っていましたが了解です。

    >>
    >>★(3):UInt64型はConvert.ToStringでコンパイルエラーとなります。
    > 前述の URL を確認してみてください。
    > 存在しないからです。必要なら自作するとか…。
    了解です。ちゃんとリファレンスを見ていないのが原因ですね。
    自作します。

    どうも、ありがとうございました。
記事No.94505 のレス / END /過去ログ163より / 関連記事表示
削除チェック/

■96287  Re[13]: トラックバーの一部に色を付ける方法
□投稿者/ 鮭 -(2020/11/09(Mon) 20:45:39)
    需要ありそうなメソッドなのに用意されていないということもあるのですね。

    どうもありがとうございます。
記事No.96227 のレス / END /過去ログ167より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -