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

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

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

No.88771 の関連記事表示

<< 0 >>
■88771  大きな数値のcsvファイルへの書き込み
□投稿者/ なつ -(2018/09/25(Tue) 21:17:33)

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

    いつも初歩な質問ですみません。
    Windows 10、VB 2017 、csvファイルです。


    下記を実行し Excelまたはメモ帳で開くと、どちらも 2.07835E+09 となりますが、
    これをそのまま 2078350000 にするにはどのようにすれば良いのですか?

    Using sr As New System.IO.StreamWriter(filename, False, System.Text.Encoding.Default)
    Dim dat As Single = 2078350000
    sr.WriteLine(dat)
    sr.Close()
    End Using
親記事 /過去ログ153より / 関連記事表示
削除チェック/

■88773  Re[1]: 大きな数値のcsvファイルへの書き込み
□投稿者/ shu -(2018/09/26(Wed) 06:42:04)
    No88771 (なつ さん) に返信

    > Dim dat As Single = 2078350000
    Singleではなく IntegerかLongかDecimalにするとよいと思います。
    Excelはそれでもセル幅が狭いとEの表記になります。
記事No.88771 のレス /過去ログ153より / 関連記事表示
削除チェック/

■88774  Re[2]: 大きな数値のcsvファイルへの書き込み
□投稿者/ 魔界の仮面弁士 -(2018/09/26(Wed) 09:01:20)
    No88773 (shu さん) に返信
    >> Dim dat As Single = 2078350000
    > Singleではなく IntegerかLongかDecimalにするとよいと思います。

    あるいは Dim dat As String = "2078350000" という手も。


    > Excelはそれでもセル幅が狭いとEの表記になります。

    さらに補足すると、Single 型の有効桁数は 24bit 相当しかありません。
    そしてこれは、10進数で 約 7.22471989594 桁分に相当します。

    一方、「2078350000」は 10 桁分ですから、有効桁数として不足し、
    Single 型だと 2.07835E+09 などの表記になってしまっていたということです。


    結局のところ、Single 型では 2078350000 という値を正確に表せません。

    これが Double 型であれば、有効桁数は 53bit 相当ですから、
    10 進数としては 約 15.9545897702 桁となり、
    「2078350000」という値でも誤差なく保持できたのですが。

    とはいえ、10 進数として正確に表したいなら、
    Single や Double ではなく、Integer や Decimal の方が良いでしょうね。
記事No.88771 のレス /過去ログ153より / 関連記事表示
削除チェック/

■88783  Re[3]: 大きな数値のcsvファイルへの書き込み
□投稿者/ なつ -(2018/09/26(Wed) 22:29:44)
    shu さん
    魔界の仮面弁士 さん
    ありがとうございます。

    Singleは正確性には欠けるようですね。

    Excelも限界があるようです。
    メモ帳では大丈夫なのですが、StringもLongもDecimalも、あと2桁増えるとEの表記にはなってもしまうのですが、
    とりあえずは LongかDecimalでも事足りますのでこれを使うようにしたいと思います。
記事No.88771 のレス / END /過去ログ153より / 関連記事表示
削除チェック/

■88784  Re[4]: 大きな数値のcsvファイルへの書き込み
□投稿者/ furu -(2018/09/27(Thu) 10:33:30)
    No88783 (なつ さん) に返信
    解決済みですが

    > Excelも限界があるようです。
    > メモ帳では大丈夫なのですが、StringもLongもDecimalも、あと2桁増えるとEの表記にはなってもしまうのですが、
    Excelが見やすいように機能としてEの表記にしているだけで
    内部のデータは桁落ちしていません。
    セルの表示形式を「標準」から「数値」に変更すると表示できます。
記事No.88771 のレス / END /過去ログ153より / 関連記事表示
削除チェック/

■88786  Re[5]: 大きな数値のcsvファイルへの書き込み
□投稿者/ 魔界の仮面弁士 -(2018/09/27(Thu) 12:44:29)
    No88784 (furu さん) に返信
    > Excelが見やすいように機能としてEの表記にしているだけで
    > 内部のデータは桁落ちしていません。

    Excel も、やはり 15 桁程度で桁落ちします。たとえば、
    12345678901234567890 と書いたとしても、
    12345678901234500000 に丸められたりします。

    ※内部データが倍精度浮動小数点数(計算式では一部多倍長浮動小数点数)らしいです。


    その他の数値型の有効桁数

    16bit 整数型… 約 4.81647993062 桁 (Int16/UInt16)
    32bit 整数型… 約 9.63295986125 桁 (Int32/UInt32)
    64bit 整数型… 約 19.2659197225 桁 (Int64/UInt64)
    Decimal 型…… 約 28.8988795837 桁 (96bit に相当)



    *.csv をダブルクリックして Excel を関連付け起動するのではなく、
    Excel の[データ]-[外部データ取り込み]-[テキストファイル]で読み取り、
    ウィザード内で列のデータ形式を「G/標準」から「文字列」に変更しておくことで、
    元のデータを維持して表示することができます。
    (その代わり、数値として扱える有効桁数が変わるわけでは無いですが)


    *.csv をダブルクリックしたときに、Excel で表示されることを優先するなら
     sr.WriteLine("=""12345678901234567890""")
    のようにするという手もあります。
    CSV データとして扱うには都合が悪くなるので、実用的では無いですが。
記事No.88771 のレス / END /過去ログ153より / 関連記事表示
削除チェック/

■88812  Re[6]: 大きな数値のcsvファイルへの書き込み
□投稿者/ なつ -(2018/09/29(Sat) 20:32:23)
    No88786 (魔界の仮面弁士 さん) に返信

    色んなことあるのですね。
    伺わないと分からぬことばかりです。
    奥が深すぎて(汗;
記事No.88771 のレス / END /過去ログ153より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -