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

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

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

全過去ログを検索

<< 0 >>
■6071  Re[9]: DataGridの数字の右詰・カンマ編集について
□投稿者/ 特攻隊長まるるう -(2007/07/31(Tue) 14:01:55)
    No6066 (ぼんじょび さん) に返信
    >自分が使っているのはDataGridviewではなく、それ以前のDataGridなので
    それは関係ないはず。。。書式指定文字列は共通では無かったかな??

    細かいところまで全て説明するのは大変ですし、回答者側も人間なので
    勘違いや説明不足な点があります。紹介された内容から、更に自分で調査
    して確かめることも忘れないでください。

    今まで紹介されたリンク先の注意書きを丁寧に読めば、ヘルプ(MSDN)の
    [標準の数値書式指定文字列]
    http://msdn.microsoft.com/library/ja/cpguide/html/cpconstandardnumericformatstrings.asp
    に辿り着くはずです。熟読した上で、自分の書いたコードに不備が無いか?
    確かめてください。また、ヘルプに書いてある内容にあわせて、書式文字列を
    変更し、テストした結果を確認してください。

    それでも理解できなかった場合は、テストした結果などとともに、具体的な
    内容の質問をお願いします。
記事No.6026 のレス /過去ログ16より / 関連記事表示
削除チェック/

■18746  Re[2]: ListViewのグリット線
□投稿者/ tanaka -(2008/05/15(Thu) 22:28:35)
    No18711 (まどか さん) に返信
    > Framweworkのバグです。
    > Framework3.5で修正されたかどうかは未確認です。
    >
    > 少なくとも2.0の最新状態では直ってませんね。
    そうだったんですか。了解しました。
記事No.18699 のレス / END /過去ログ36より / 関連記事表示
削除チェック/

■40252  Re[8]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ やじゅ -(2009/08/21(Fri) 21:35:13)
>
    2009/08/21(Fri) 21:38:13 編集(投稿者)

    No40250 (RT さん) に返信
    > IHTMLElement.getAttribute メソッド
    > ↑を使いたいのですが、どうしても使い方が分りません。

    RTさんは既に使ってるじゃないですか
    > textBox1.Text = webBrowser1.Document.GetElementFromPoint(webBrowser1.PointToClient(Control.MousePosition)).GetAttribute("src");
    > ↑で絶対パスは取得することは出来ました。しかし相対パスの取り方がわかりません。


    魔界の仮面弁士さんが、第 2 引数に「2」または「3」を指定してみてくださいって言ってるんですよ。
    .GetAttribute("src",2);  または .GetAttribute("src",3);  ちなみに3は、1+2の組み合わせの意味です。

    >http://msdn.microsoft.com/en-us/library/aa752280.aspx
    > 読解力がないせいか、↑のmsdnのどこにヒントがあるのかわかりません。メソッドの使い方の例も載ってないみたいです。

    これをふまえて、再度そのサイトを見てみる。
記事No.40213 のレス /過去ログ69より / 関連記事表示
削除チェック/

■85811  Re[4]: 指数表記する方法
□投稿者/ 魔界の仮面弁士 -(2017/11/26(Sun) 19:36:47)
    No85807 (ちゃんころ さん) に返信
    > Public Const diele As Single = 8.85418782E-12#
    > というのが
    > Public Const diele As Single = 0.00000000000885418782
    > というのに変わってしまいます。
    
    VB のエディタは、極力、小数表記で記述しようとするためです。
    その境目となるのは、おそらく指数部の桁数でしょう。
    
    Double 型リテラルの場合、E+14〜E-16 の範囲は小数表記、その範囲外が指数表記になり、
    Single 型リテラルの場合、E+6〜E-8 の範囲が小数表記、その範囲外が指数表記になります。
    Decimal 型リテラルはの場合は、すべて小数表記にフォーマットされます。
    
    
    > どうすれば良いですか?
    
    今回の「8.85418782E-12」という表現からして、有効桁数 9 桁の値を表現したいようですが、
    Hongliang さんから指摘のあるとおり、Single 型ではこの精度の値を扱うことはそもそも出来ません。
    どう修正すべきかは、求める要件によって変わりますが、有効桁数 9 桁が本当に必要なら、
    As Double にするか、As Decimal にする必要があるでしょう。
    
    より正確に言えば、
    Double 型の仮数部の幅は、53+1ビット≒15.95 桁分であるのに対し、
    Single 型の仮数部の幅は、23+1ビット≒7.225 桁分しかないということです。
    ちなみに Decimal 型の場合は 96 ビット幅なので、約 28.89888 桁です。
    
    有効桁数 9 桁の値を Single 型で管理するには有効桁数が不足してしまい、
    どうあっても、格納時には近似値に丸められることになるでしょう。
    
    確認のため、「8.85418782E-12」相当の近似値を Single 型で表現してみましょうか。
    先に言っておくと、誤差が最小になるのは 3 番です。
    
    《Single のバイナリ表現》
    1: 0b00101101000110111100001110110110
    2: 0b00101101000110111100001110110111
    3: 0b00101101000110111100001110111000
    4: 0b00101101000110111100001110111001
    5: 0b00101101000110111100001110111010
    
    《上記を 10進小数で表現した値》
    1: 0.00000000000885418648122193729932405403815209865570068359375
    2: 0.000000000008854187348583675287727601244114339351654052734375
    3: 0.000000000008854188215945413276131148450076580047607421875
    4: 0.000000000008854189083307151264534695656038820743560791015625
    5: 0.00000000000885418995066888925293824286200106143951416015625
    
    
    ちなみに上記を diele.ToString("R") でラウンドトリップ出力した場合、
    1: 8.85418648E-12
    2: 8.854187E-12
    3: 8.854188E-12
    4: 8.854189E-12
    5: 8.85419E-12
    となります。
    
    いずれも E-8 を下回る指数表現であるため、この場合は自動変換が起こりません。
     Public Const Sample1 As Single = 8.85418648E-12F
     Public Const Sample2 As Single = 8.854187E-12F
     Public Const Sample3 As Single = 8.854188E-12F
     Public Const Sample4 As Single = 8.854189E-12F
     Public Const Sample5 As Single = 8.85419E-12F
    
    もともと扱おうとしていた「8.85418782E-12F」という値は、
    2 番と 3 番の間になり、Single の精度では表現しきれません。
    そのため、より近い値である 3 番の表記に変換されたということです。
    (有効桁数ってそういうものですよね)
    
    
    > Doubleでも試してみたのですが
    
    同様に、「8.85418782E-12」の Double 値による近似値表現を見てみます。
    こちらの場合は、3 番が同一値となります。(格納誤差はありません)
    
    
    《Double のバイナリ表現》
    1: 0b0011110110100011011110000111011011110001011001000110011010111010
    2: 0b0011110110100011011110000111011011110001011001000110011010111011
    3: 0b0011110110100011011110000111011011110001011001000110011010111100
    4: 0b0011110110100011011110000111011011110001011001000110011010111101
    5: 0b0011110110100011011110000111011011110001011001000110011010111110
    
    《上記を 10進小数で表現した値》
    1: 0.0000000000088541878199999971451928483766392647021092887626991796423681080341339111328125
    2: 0.00000000000885418781999999876077998226927144218532939046184537801309488713741302490234375
    3: 0.000000000008854187820000000376367116161903619668549492160991576383821666240692138671875
    4: 0.00000000000885418782000000199195425005453579715176959386013777475454844534397125244140625
    5: 0.0000000000088541878200000036075413839471679746349896955592839731252752244472503662109375
    
    《R 書式によるラウンドトリップ出力》
    1: 8.8541878199999971E-12
    2: 8.8541878199999988E-12
    3: 8.85418782E-12
    4: 8.854187820000002E-12
    5: 8.8541878200000036E-12
    
    
    そして先述した通り、Double 型で E-12 の範囲は小数表記されるため、
     Public Const Sample1 As Double = 8.8541878199999971E-12R
     Public Const Sample2 As Double = 8.8541878199999988E-12R
     Public Const Sample3 As Double = 8.85418782E-12R
     Public Const Sample4 As Double = 8.854187820000002E-12R
     Public Const Sample5 As Double = 8.8541878200000036E-12R
    と書いても
     Public Const Sample1 As Double = 0.0000000000088541878199999971R
     Public Const Sample2 As Double = 0.0000000000088541878199999988R
     Public Const Sample3 As Double = 0.00000000000885418782R
     Public Const Sample4 As Double = 0.000000000008854187820000002R
     Public Const Sample5 As Double = 0.0000000000088541878200000036R
    に変換される結果になりますね。
記事No.85804 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85814  Re[5]: 指数表記する方法
□投稿者/ 魔界の仮面弁士 -(2017/11/26(Sun) 21:20:37)
    No85811 (魔界の仮面弁士) に追記
    > Double 型の仮数部の幅は、53+1ビット≒15.95 桁分であるのに対し、
    > Single 型の仮数部の幅は、23+1ビット≒7.225 桁分しかないということです。
    > ちなみに Decimal 型の場合は 96 ビット幅なので、約 28.89888 桁です。

    間違い訂正。

    Double の仮数部のビット数が間違っていました。
    Double は 53+1 ビット ではなく、52+1 ビット でしたね。

    1bitで表せる範囲は 0〜1 で、0.30103 桁相当
    2bitで表せる範囲は 0〜3 で、0.60205 桁相当
    3bitで表せる範囲は 0〜7 で、0.90308 桁相当
    4bitで表せる範囲は 0〜15で、1.20412 桁相当
    5bitで表せる範囲は 0〜31で、1.50515 桁相当
    6bitで表せる範囲は 0〜63で、1.80618 桁相当
    7bitで表せる範囲は0〜127で、2.10721 桁相当
    8bitで表せる範囲は0〜255で、2.40824 桁相当

    23+1bit なら、7.22472 桁相当
    52+1bit なら 15.95459 桁相当
記事No.85804 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85812  Re[2]: 指数表記する方法
□投稿者/ 魔界の仮面弁士 -(2017/11/26(Sun) 20:22:30)
    No85805 (ちゃんころ さん) に返信
    > Public Const diele As Single = 8.854188E-12!
    VB.NET 的には
     Public Const diele As Single = 8.854188E-12F
    とも書けますね。
    
    既にご存知かもしれませんが、
    接尾辞 F または型宣言文字 ! が Single / 単精度浮動小数点型で
    接尾辞 R または型宣言文字 # が Double / 倍精度浮動小数点型で
    接尾辞 D または型宣言文字 @ が Decimal / 10進型となっています。
    型宣言文字は古い VB や BASIC でも使われていた記号ですが、現在でも有効ですね。
    
    
    C# だと、下記のように微妙に違うので、相互書き換えの際にはご注意を…。
    接尾辞 F または f が float / System.Single で
    接尾辞 D または d が double / System.Double で
    接尾辞 M または m が decimal / System.Decimal です。
    
    
    
    ■No85804 (ちゃんころ さん) に返信
    > Public Const diele As Single = 8.85418782E-12
    > と入力すると、自動で
    > Public Const diele As Single = 0.00000000000885418782
    > と置き換わってしまいます。
    
    これが VBA だとその逆で、
     8.85418782E-12
    に統一されてしまうみたいですね。
    
    No85811 で示した
    >> Double 型リテラルの場合、E+14〜E-16 の範囲は小数表記、その範囲外が指数表記になり、
    >> Single 型リテラルの場合、E+6〜E-8 の範囲が小数表記、その範囲外が指数表記になります。
    に合わせて言えば、VBA で小数表記になるリテラル範囲は、
    Double 型が E+14〜E-16 の範囲で、Single 型が E+06〜E-07 の範囲のようです。
    
    
    > 指数表記のままで表示したいのですが
    > どうすれば良いですか?
    
    Visual Studio のオプション設定で、「コードの再フォーマット」を Off にすれば
    一応置き換わらなくはなります。
    
    といっても、[編集]-[詳細]-[ドキュメントのフォーマット] などによって
    容易に置き換えられてしまうので、一時凌ぎにしかなりませんが。
    
    
    コードの表現上、指数表記を好むのであれば、Const の代わりに
    ReadOnly なフィールド変数かプロパティで代用するのはどうでしょう。
     Public Shared ReadOnly diele As Single = CSng("8.541882E-12")
    
    Const でないと都合が悪いなら、コメントで補足しておくとか…。
     Public Const diele As Single = 0.00000000000885418782   ' = 8.85418782E-12
    
    
    > Public Const diele As Single = 8.85418782 * 10 ^ (-12)
    > というようにするしかないですか?
    
    個人的にはあまり好きな表現ではないですが、
    本来求める結果と同じ結果となるのであれば、
    そのような書き換えをするという手もありだと思いますよ。
    
    ちなみに、
     Public Const diele1 As Single = 0.00000000000885418782  '8.85418782E-12
     Public Const diele2 As Single = 8.854188E-12F           '8.85418782E-12F
     Public Const diele3 As Single = 8.85418782 * 10 ^ (-12) '8.85418782 * 10 ^ (-12)
     Public Const diele4 As Single = 885418782 * 1.0E-20R    '885418782 * 1.0E-20R
     Public Const diele5 As Single = 885418782 * 1.0E-20F    '885418782 * 1.0E-20F
    の場合、個人的には diele2 の記述を推奨しています。
    
    diele1 と diele2 は、単一の値が VB によって自動整形されただけであり、
    それによって結果が異なることは無いと言えるからです。
    
    加えて、右辺の数式としては、1、3、4 が Double 型の結果になる式で、
    2, 5 が Single となる式です。
    
    そのため、結果が Single になることを重視して、私は diele2 のリテラル表記で
    宣言しています。diele3 は、「^ 演算子」によるものなので、
    結果が Double になるのが個人的には好みでは無いので。
    結果的には同一なのですけれどね。
    
    
    diele4 は、diele3 の計算を「整数 × 10^n」形式にしたものですが、
    今回のケースでは、分かり難くなるだけでメリットが無いですね。
    
    そして diele5 は、diele4 を Single に統一しようとしたものですが、
    これは悪手というか、『間違った対処方法』であることに注意が必要です。
    
    何が問題かといえば、diele5 だけ、diele1〜diele4 とは異なる結果になってしまうという点です。
    これは、Visual Basic の仕様において、「Integer * Single」の演算が
    「CSng(Integer) * Single」相当の処理になってしまうためです。
    (正確な表現ではないですが、あくまでイメージとして)
    
    今回は有効数字 9 桁であり、そもそも Single では表せない値ですから、
    「885418782.0F」という値は Single 値で表現しきれません。そのため、近似値である
    「885418752.0F」という値で計算されてしまい、本来の値から微減してしまうわけです。
記事No.85804 のレス /過去ログ147より / 関連記事表示
削除チェック/

■97226  Re[4]: ACCESS FULL にならないSQLの書き方について
□投稿者/ ひろし -(2021/04/16(Fri) 22:52:26)
    No97224 (WebSurfer さん) に返信

    ひろしです。
    コメントありがとうございます。

    > 具体例としては以下の記事のようにして期待通りになっているのですが・・・
    >
    > DropDownList を使って絞込み
    > http://surferonwww.info/BlogEngine/post/2011/07/17/Showing-records-selected-by-DropDownLists-into-GridView.aspx
    >
    > 質問者さんのケースで何故うまくいかないのかは情報が少なすぎて分かりません。

    こちらの記事を拝見しました。
    もちろん、抽出という意味では問題なく動作しました。

    ただ、やはり検索的には全件検索が動いてしまいます。

    実際には EXPLAIN PLAN FOR を使って、以下のSQLを実行しました。L

    select *
    from emp a
    where (:id = 'ALL' or a.ID >= :id)


    その結果が

    --------------------------------------------------------------------------
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    --------------------------------------------------------------------------
    | 0 | SELECT STATEMENT | | 59 | 4130 | 3 (0)| 00:00:01 |
    |* 1 | TABLE ACCESS FULL| EMP | 59 | 4130 | 3 (0)| 00:00:01 |
    --------------------------------------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

    1 - filter("A"."ID">=:ID OR :ID='ALL')

    Note
    -----
    - dynamic sampling used for this statement (level=2)

    となりました。

    EMPテーブルの ID が CHAR(3) で、001 〜 999 までのデータが更新されており
    パラメータを IDパラメータを 100 にしたところ、100以上のデータが正しく取得され、
    ALL をセットすると全件取得出来たので、動作的には問題なしです。


    一つ分かったのですが、OracleParameterを使用せず
    :ID を '100' にリプレースかけて


    select *
    from emp a
    where ('100' = 'ALL' or a.ID >= '100')

    で実行計画を見てみると

    --------------------------------------------------------------------------------------------
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    --------------------------------------------------------------------------------------------
    | 0 | SELECT STATEMENT | | 900 | 63000 | 1 (0)| 00:00:01 |
    | 1 | TABLE ACCESS BY INDEX ROWID| EMP | 900 | 63000 | 1 (0)| 00:00:01 |
    |* 2 | INDEX RANGE SCAN | SYS_C0012163 | 9 | | 1 (0)| 00:00:01 |
    --------------------------------------------------------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

    2 - access("A"."ID">='100')

    Note
    -----
    - dynamic sampling used for this statement (level=2)

    という結果となり、インデックスが使われました。


    OracleParameter より、リプレースした方がいいような気がしてきました・・・


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

■97941  Re[11]: context.request.paramsについて
□投稿者/ WebSurfer -(2021/08/10(Tue) 16:38:56)
    No97938 (???? さん) に返信
    
    話が通じなくてラチがあかないので、ここまで書けばわかるだろうということを書いておきます。
    
    以下のコードで[POST] ボタンをクリックすると、質問者さんがやったのとほぼ同様に jQuery ajax
    を使って 2 つのテキストボックスの value が送信されます。value に "a", "14" が設定済みなのに
    注意。fd.append(...) がコメントアウトしてあるところにも注意。
    
    <%@ Page Language="C#" AutoEventWireup="true" 
        CodeBehind="WebForm20.aspx.cs" 
        Inherits="WebApplication1.WebForm20" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <script src="Scripts/jquery-3.4.1.js"></script>
        <script type="text/javascript">
            //<![CDATA[
            $(function () {
                $('#ajaxPost').on('click', function (e) {
                    var fd = new FormData(document.querySelector("form"));
    
                    //fd.append("Hf_TargetId", "a");
                    //fd.append("Txt_Marche", "14");
    
                    $.ajax({
                        url: '/myapp/ajaxposthandler.ashx',
                        method: 'post',
                        data: fd,
                        processData: false,
                        contentType: false
                    }).done(function (response) {
                        $("#result").empty;
                        $("#result").text(response);
                    }).fail(function (jqXHR, textStatus, errorThrown) {
                        $("#result").empty;
                        $("#result").text('textStatus: ' + textStatus +
                            ', errorThrown: ' + errorThrown);
                    });
                });
            });
            //]]>
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <h1>POST by jQuery ajax</h1>
            <input id="Hf_TargetId" name="Hf_TargetId" type="text" value="a" />
            <input id="Txt_Marche" name="Txt_Marche" type="text" value="14" />
            <input id="ajaxPost" type="button" value="POST" />
            <div id="result"></div>
        </form>
    </body>
    </html>
    
    Fiddler で要求をキャプチャすると以下のようになります。name が Hf_TargetId および Txt_Marche
    の値をみてください。期待通り a と 14 が送信されている点に注目。
    
    
    POST https://localhost:44364/myapp/ajaxposthandler.ashx HTTP/1.1
    Host: localhost:44364
    Connection: keep-alive
    Content-Length: 563
    ・・・中略・・・
    Accept-Language: ja,en-US;q=0.9,en;q=0.8,de;q=0.7
    
    ------WebKitFormBoundarytZhyclsKu5e6ksnm
    Content-Disposition: form-data; name="__VIEWSTATE"
    
    5D7jXYvhFvOqzAXeQ9Fhx6EZQH4YNXu1IpYJfdF6lv0e1Co7QhFQvebPCBzep0Gm3poGqNRLkxf/jI1yz2PHo9cupCkPckCVknXSZx8ii10=
    ------WebKitFormBoundarytZhyclsKu5e6ksnm
    Content-Disposition: form-data; name="__VIEWSTATEGENERATOR"
    
    B928ED7D
    ------WebKitFormBoundarytZhyclsKu5e6ksnm
    Content-Disposition: form-data; name="Hf_TargetId"
    
    a
    ------WebKitFormBoundarytZhyclsKu5e6ksnm
    Content-Disposition: form-data; name="Txt_Marche"
    
    14
    ------WebKitFormBoundarytZhyclsKu5e6ksnm--
    
    
    上の aspx のコードの fd.append(...) のコメントアウトを解除して同じことを行うと name が
    Hf_TargetId および Txt_Marche の部分は以下のようにダブります。
    
    
    ------WebKitFormBoundaryudm7lpE3oJMs1sMc
    Content-Disposition: form-data; name="Hf_TargetId"
    
    a
    ------WebKitFormBoundaryudm7lpE3oJMs1sMc
    Content-Disposition: form-data; name="Txt_Marche"
    
    14
    ------WebKitFormBoundaryudm7lpE3oJMs1sMc
    Content-Disposition: form-data; name="Hf_TargetId"
    
    a
    ------WebKitFormBoundaryudm7lpE3oJMs1sMc
    Content-Disposition: form-data; name="Txt_Marche"
    
    14
    ------WebKitFormBoundaryudm7lpE3oJMs1sMc--
    
    
    これが、原因でしょう。自信度 99.99% ぐらい。
記事No.97922 のレス /過去ログ170より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -