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

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

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

全過去ログを検索

<< 0 | 1 >>
■5336  Re[2]: C#でCSVファイルを出力
□投稿者/ 2007新人 -(2007/07/10(Tue) 19:58:33)
    No5334 (片桐 さん) に返信

    csv.Append("\"" + DataSet.Table[idx].EMPID + "\"" + ",");
    csv.Append("\"" + DataSet.Table[idx].EMPNAME + "\"" + ",");
    csv.Append("\"" + DataSet.Table[idx].EMPFLAG + "\"" + "\n");

    上記のように行いましたら、期待結果どおりになりました。

    結果
    "Emp001","山田太郎",0改行
    "Emp002","山田次郎",0改行
    "Emp003","山田三郎",0改行

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

■17126  Re[1]: ユーザーコントロールに配置するイメージリストについて
□投稿者/ ネタ好き -(2008/04/17(Thu) 13:29:30)
    No17052 (ぶらぴ さん) に返信
    状況によります。別のクラスといっても、ユーザーコントロールよりも情報数が多ければ、
    逆に無駄になります。また、そのクラスの存在意義も疑問に思います。
    もし画像を保存するだけならば、クラスに保存するよりも直接使用する方がよいと思います。

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

■47241  Re[2]: 正確な日時を取得するには
□投稿者/ こくぶん -(2010/02/22(Mon) 21:10:54)
    # 雑談気味

    > NTPでとったりHTTPでとったりすればよいかと。

    NTP サーバを偽装されたら元も子もないですね。 :p


    あと、ネットにつながる=なんでも出来るワケではない事にも注意が必要かと。
    例えば Outbound が TCP 80/443 しか許可されていない様なネットワークだと、 NTP は使えないです。


    まぁ、認証で必要とする程度(年月日位?)であれば、 HTTP(S) 辺りで期限情報を送信するサーバを用意してそこにつなぐ、
    位でいいかとは思います。

    # ちなみに、 HTTP(S) にしたところで偽装は可能なので(以下略
記事No.47239 のレス /過去ログ80より / 関連記事表示
削除チェック/

■84065  有効桁数3桁まででJIS丸めがしたい
□投稿者/ AI -(2017/05/12(Fri) 14:53:14)

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

    2017/05/12(Fri) 15:07:31 編集(投稿者)
    2017/05/12(Fri) 15:07:15 編集(投稿者)

    VB.net2005で開発をしております

    有効数字3桁まででJIS丸め(有効数字4桁目をJIS丸め)をしたいのですが、
    どのように考えれば良いのか分からずに困っております。

    例1. 0.1234 → 0.123
    例2. 1.234 → 1.234
    例3. 12.345 → 12.3
    例4. 123.45 → 123
    例5. 1234.5 → 1230

    例1. 0.1234 → 0.123 の場合であれば、
    以下のように求めればよいかと思いますが、
    他の例2.〜5などの場合どのように求めれば良いのか分かりません。

    Dim Value as decimal

    Value = System.Math.Round(0.1234, 3)

    以上、アドバイスの程どうぞよろしくお願いします。



親記事 /過去ログ143より / 関連記事表示
削除チェック/

■84066  Re[1]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ Jitta -(2017/05/12(Fri) 15:18:33)
    No84065 (AI さん) に返信

    Decimal 型を使うなら、
    元の数を1未満になるまで10で割って、
    roundして、
    割った回数だけ10を掛ける。
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84067  Re[2]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ AI -(2017/05/12(Fri) 15:35:48)
    No84066 (Jitta さん) に返信
    > ■No84065 (AI さん) に返信
    >
    > Decimal 型を使うなら、
    > 元の数を1未満になるまで10で割って、
    > roundして、
    > 割った回数だけ10を掛ける。

    Jitta さん、ご回答ありがとうございます!

    > 元の数を1未満になるまで10で割って、
    > roundして、
    > 割った回数だけ10を掛ける。

    そんな考え方があったんだ!と思い、
    更に色々なパターンを考えてみたのですが、
    元の数が大きい場合はアドバイスいただいた考え方で計算できると思いますが、
    元の数が小さい場合はどのようにすれば良いのでしょうか?

    例えば、0.001234や0.0001234、0.00001234などだと
    その考え方が使えないような気がするのですが...
    どうすれば良いでしょうか?

    アドバイスの程、どうぞよろしくお願いします。

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

■84069  Re[1]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ 魔界の仮面弁士 -(2017/05/12(Fri) 16:29:42)
    No84065 (AI さん) に返信
    > JIS丸め
    JIS Z 8401 規則 A のことですかね。


    > 例2. 1.234 → 1.234
    3 桁にするなら、これは 1.23 になるべきなのでは?



    > Dim Value as decimal

    Decimal 型は、内部的に桁数情報を持っていますが、
    それは考慮しないものと考えてよいですか?


    '下記の 3 値は、いずれも 2.73 という値になる
    '
    Dim a As Decimal = CDec("1.230") + CDec("1.5")
    Dim b As Decimal = CDec("1.23") + CDec("1.5")
    Dim c As Decimal = CDec("1.23") + CDec("1.5000")

    'いずれも同一の値として扱われるが、内部表現は異なっており、
    '.ToString や .GetBits メソッドを呼び出した場合の結果が異なる
    '
    Console.WriteLine(a) '2.730  … 内部形式は 2730 * 10 ^ -3
    Console.WriteLine(b) '2.73   … 内部形式は 273 * 10 ^ -2
    Console.WriteLine(c) '2.7300 … 内部形式は 27300 * 10 ^ -4



    > どのように求めれば良いのか分かりません。

    手抜き実装:

    Function 丸め(ByVal 値 As Decimal, ByVal 丸め桁数 As Byte) As Decimal
    Return CDec(値.ToString("E" & (丸め桁数 - 1).ToString()))
    End Function


    > VB.net2005で開発をしております
    蛇足ではありますが、2005 以降では .NET の名を冠さずに、
    単に "Visual Basic 2005" のように呼ばれるようになっています。
    (2003 までは "Visual Basic .NET 2003" などと呼ばれていましたが)

    勿論、VB2005 も VB.NET であることには変わりないのですけれどね。
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84068  Re[3]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ hihijiji -(2017/05/12(Fri) 16:17:54)
    簡単なのは一度指数表記にしてから変換かな?
    C#からの自動変換なので間違いがあるかもしれませんがこんな感じ
    Dim dec = 0.012345D
    Dim ans = dec
    .ToString("0.0000e00")
    .Split(New () {"e"C})
    .[Select](Function(s) Decimal.Parse(s))
    .Aggregate(Function(l, r) Math.Round(l, 2) * CDec(Math.Pow(10.0, CDbl(r))))
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84071  Re[4]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ AI -(2017/05/12(Fri) 17:24:02)
    No84068 (hihijiji さん) に返信
    > 簡単なのは一度指数表記にしてから変換かな?
    > C#からの自動変換なので間違いがあるかもしれませんがこんな感じ
    > Dim dec = 0.012345D
    > Dim ans = dec
    > .ToString("0.0000e00")
    > .Split(New () {"e"C})
    > .[Select](Function(s) Decimal.Parse(s))
    > .Aggregate(Function(l, r) Math.Round(l, 2) * CDec(Math.Pow(10.0, CDbl(r))))

    hihijiji さん、ご回答ありがとうございます!

    > C#からの自動変換なので間違いがあるかもしれませんがこんな感じ

    自動変換していただき、ありがとうございました。
    自分なりにvb.netのコードに修正して、試してみました。

    ToString関数を使うっていう発想がなかったです。
    すごい、一瞬で変換できた!!と感動でした。笑

    どうもありがとうございました。

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

■84075  Re[5]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ hihijiji -(2017/05/12(Fri) 18:17:02)
    捕捉します。
    .ToString("0.0000e00")で変換誤差があります。
    必要桁数より2桁多く取っているので問題ないかと思いますがご了承ください。
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84077  Re[6]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ AI -(2017/05/12(Fri) 19:08:45)
    No84075 (hihijiji さん) に返信

    hihijiji さん、補足ありがとうございます!

    > .ToString("0.0000e00")で変換誤差があります。

    .ToString("0.00e00")が正しいという事ですよね?

    修正して、テストしました。

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

■84079  Re[7]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ hihijiji -(2017/05/13(Sat) 10:31:46)
    いえそうではなく、例えば

    1.11495 の入力があった場合
    ↓   少数5位が四捨五入されて
    1.1150e-00
    ↓   少数3位が偶数丸めされて
    1.12
    の出力が返ってきます。
    題意からは1.11が返ってくるべきですので、このケースでは答えがあいません。
    ただし、確率的にはこんなケースは少なく有効数字3桁なら少数2位は誤差を含むため実用上は問題ないはずです。
    .ToString("0.00e00")にすると、誤差以前に少数3位が四捨五入されますので題意からは完全に外れます。
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84080  Re[8]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ 魔界の仮面弁士 -(2017/05/13(Sat) 11:14:24)
    No84079 (hihijiji さん) に返信
    > 1.11495 の入力があった場合
    > ↓   少数5位が四捨五入されて
    > 1.1150e-00
    > ↓   少数3位が偶数丸めされて
    > 1.12
    > の出力が返ってきます。

    少数→小数


    私の No84069 や、AI さんの No84077 のコードでは対処されており、
    問題なく 1.11 が返されるようになっています。


    Dim a As Decimal = 1.11495D

    Dim b As Decimal = CDec(a.ToString("E2"))
    Dim c As Decimal = CDec(a.ToString("0.00e00"))


    > ただし、確率的にはこんなケースは少なく
    確率的とは?


    > 有効数字3桁なら少数2位は誤差を含むため実用上は問題ないはずです。
    Double や Single は二進小数ですが、Decimal は十進小数なので、
    格納誤差は生じないはずですが、そういうことではなく?
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84081  Re[9]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ hihijiji -(2017/05/13(Sat) 11:40:47)
    魔界の仮面弁士さん お世話になってます。
    魔界の仮面弁士さんの書き込みには何度も助けられました。
    レスを貰えて嬉しいです。

    本題ですが、
    1.125を小数3位で偶数丸め(JIS丸め)すると1.12になりますが、四捨五入すると1.13になります。
    入力桁数が求める桁数より多い場合には、偶数丸めと四捨五入は5%の確率で違いがでます。
    もちろん有効数字を扱う以上、5%の確率で最小桁が違っても実用上支障はないはずです。
    しかし題意とは違ってしまいます。
    そこで2回に分けて変換を行って題意に沿った(偶数丸めを行った)回答しました。
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84084  Re[10]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ 魔界の仮面弁士 -(2017/05/13(Sat) 22:04:02)
    No84081 (hihijiji さん) に返信
    > 1.125を小数3位で偶数丸め(JIS丸め)すると1.12になりますが、四捨五入すると1.13になります。
    > そこで2回に分けて変換を行って題意に沿った(偶数丸めを行った)回答しました。

    2 回に分けると都合が悪いということは、ご自身も示されていますよね。
    このことは、JIS Z 8401:1999 「数値の丸め方」にも明記されています。

    》 規則 A,B を 2 回以上使って丸めることは,誤差の原因となる。
    》 したがって,丸めは,常に 1 段階で 行わなければならない。
    》 例 12.251 は,12.3 と丸めるべきであって,まず 12.25 とし,次いで 12.2 としてはならない。

    規則 A はいわゆる偶数丸め、規則 B は四捨五入のことです。
    VB でいえば

      規則 A … System.Math.Round(Decimal値, 小数部桁数, System.MidpointRounding.ToEven)
      規則 B … System.Math.Round(Decimal値, 小数部桁数, System.MidpointRounding.AwayFromZero)

    にあたりますので、JIS丸めで例示されている 12.251 →12.3 は規則B(四捨五入)のことですね。


    ひとまず、規則 A / 規則 B の双方に対応した、
    『有効桁数』での丸め処理を作ってみました。

    No84065 で示された要件は満たしていると思います。
    (例2 については、 No84069 で指摘したように記載ミスであると想定)


    ''' <param name="digits">有効桁数(1〜29)</param>
    Function JisRound(value As Decimal, Optional digits As Byte = 3, Optional mode As MidpointRounding = MidpointRounding.ToEven) As Decimal
      digits = Math.Max(1, Math.Min(29, digits))
      Dim fmt As String = StrDup(digits - 1, "#"c) & "0." & StrDup(29, "0"c) & "E0"
      Dim s() As String = value.ToString(fmt).Split("E"c)
      Dim a As Decimal = Math.Round(CDec(s(0)), 0, mode)
      Dim b As Integer = CInt(CDec(s(1)))
      Return CDec(String.Format("{0:0}E{1:D}", a, b))
    End Function



    指定された有効桁数が、有効数字の桁数よりも大きい場合には、
      JisRound(2.5D, 2) → 2.5
      JisRound(2.5D, 3) → 2.50
      JisRound(2.5D, 4) → 2.500
    のように、小数部の末尾にゼロが付与された値で返却されます。
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84093  Re[11]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ AI -(2017/05/15(Mon) 18:03:08)
    No84084 (魔界の仮面弁士 さん) に返信

    魔界の仮面弁士さん、ご回答ありがとうございます!

    > 》 規則 A,B を 2 回以上使って丸めることは,誤差の原因となる。
    > 》 したがって,丸めは,常に 1 段階で 行わなければならない。
    > 》 例 12.251 は,12.3 と丸めるべきであって,まず 12.25 とし,次いで 12.2 としてはならない。
    >
    > 規則 A はいわゆる偶数丸め、規則 B は四捨五入のことです。
    > VB でいえば
    >
    >   規則 A … System.Math.Round(Decimal値, 小数部桁数, System.MidpointRounding.ToEven)
    >   規則 B … System.Math.Round(Decimal値, 小数部桁数, System.MidpointRounding.AwayFromZero)
    >
    > にあたりますので、JIS丸めで例示されている 12.251 →12.3 は規則B(四捨五入)のことですね。
    >
    >
    > ひとまず、規則 A / 規則 B の双方に対応した、
    > 『有効桁数』での丸め処理を作ってみました。
    >
    > No84065 で示された要件は満たしていると思います。
    > (例2 については、 No84069 で指摘したように記載ミスであると想定)
    >
    >
    > ''' <param name="digits">有効桁数(1〜29)</param>
    > Function JisRound(value As Decimal, Optional digits As Byte = 3, Optional mode As MidpointRounding = MidpointRounding.ToEven) As Decimal
    >   digits = Math.Max(1, Math.Min(29, digits))
    >   Dim fmt As String = StrDup(digits - 1, "#"c) & "0." & StrDup(29, "0"c) & "E0"
    >   Dim s() As String = value.ToString(fmt).Split("E"c)
    >   Dim a As Decimal = Math.Round(CDec(s(0)), 0, mode)
    >   Dim b As Integer = CInt(CDec(s(1)))
    >   Return CDec(String.Format("{0:0}E{1:D}", a, b))
    > End Function

    JisRound関数の作成、どうもありがとうございます。

    作成いただいた「JisRound」について、
    テストさせていただいたのですが、少し気になる事がありました。

    1. JisRound(1.11495, 3) → 1.11 ※No84079の値で確認
    2. JisRound(1.125 , 3) → 1.12 ※No84081の値で確認
    3. JisRound(12.251 , 3) → 12.3 ※No84084の値で確認
    4. JisRound(12.25 , 3) → 12.2

    となってしまいます。

    1と2では欲しい結果になっていると思いますが、
    3と4で両方の結果が異なる理由がよく分かりません。
    おそらく「12.2」になれば正解だと思うのですが...
    この値を求める事はできないのでしょうか。

    試しに、以下のコートを実行してみました。
    System.Math.Round(12.251, 1, System.MidpointRounding.ToEven) → 12.3
    System.Math.Round(12.25 , 1, System.MidpointRounding.ToEven) → 12.2

    アドバイスの程、どうぞよろしくお願いします。

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

■84094  Re[12]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ furu -(2017/05/15(Mon) 18:25:11)
    No84093 (AI さん) に返信
    > System.Math.Round(12.251, 1, System.MidpointRounding.ToEven) → 12.3
    > System.Math.Round(12.25 , 1, System.MidpointRounding.ToEven) → 12.2

    12.251は12.2よりも12.3に近いので12.3であってると思います。
    12.25は12.2と12.3のどっちも0.05だけ違うので
    偶数である12.2になる。
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84114  Re[13]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ AI -(2017/05/16(Tue) 14:39:55)
    No84094 (furu さん) に返信
    > ■No84093 (AI さん) に返信
    >>System.Math.Round(12.251, 1, System.MidpointRounding.ToEven) → 12.3
    >>System.Math.Round(12.25 , 1, System.MidpointRounding.ToEven) → 12.2
    >
    > 12.251は12.2よりも12.3に近いので12.3であってると思います。
    > 12.25は12.2と12.3のどっちも0.05だけ違うので
    > 偶数である12.2になる。

    furu さん、ご回答ありがとうございます!

    「JIS丸め」の考え方が、間違っていました。

    > System.Math.Round(12.251, 1, System.MidpointRounding.ToEven) → 12.3
    > System.Math.Round(12.25 , 1, System.MidpointRounding.ToEven) → 12.2

    上記のようになるのが正解ですね。

    「12.251」の有効桁数3桁でJIS丸めした結果が
    「12.2」が正解だと思い込んでいたのが間違いでした。
    正しくは「12.3」ですね。

    ご指摘どうもありがとうございました。

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

■84097  Re[12]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ 魔界の仮面弁士 -(2017/05/15(Mon) 19:44:15)
    2017/05/15(Mon) 19:50:38 編集(投稿者)

    No84093 (AI さん) に返信
    > 4. JisRound(12.25 , 3) → 12.2
    > となってしまいます。

    これは想定どおりの動作です。

    当初の質問の仕様が曖昧になってしまっていますので、
    まずは「正しい仕様」を厳密に定めておくのが先決かと思います。


    繰り返しの質問になりますが、まずは仕様をハッキリさせましょう。
    No84065 で AI さんが書かれた ★JIS丸め★ とは、
    下記のいずれの動作を想定しているのでしょうか?

    >>> 有効数字3桁まででJIS丸め(有効数字4桁目をJIS丸め)をしたい


    (1) JIS Z 8401:1999 の規則 A(偶数丸めとか銀行丸めとか五捨五入と呼ばれる動作)
    (2) JIS Z 8401:1999 の規則 B(いわゆる四捨五入)
    (3) 上記以外


    なお、JIS 丸めについて知りたい場合は、下記の【JIS検索】で、
    "Z8401" を検索してみて確認してみてください。数ページの PDF です。

    https://www.jisc.go.jp/app/jis/general/GnrJISSearch.html



    具体例を挙げると、規則 A と B では下記のような違いがあります。
     規則A では、1.5 や 2.5 は 「2」に丸められます。-1.5 や -2.5 は「-2」です。
     規則B では、1.5 は「2」に、2.5 は「3」に丸められます。-1.5 は「-2」、-2.5 は「-3」です。


    規則 A では、中間値は偶数方向に丸められます。だから ToEven。

    規則 B では、正の中間値は切り上げされますが、負の中間値は切り捨てです。
    ゼロを基準に正負で対称的になっています。だから AwayFromZero。


    このほか、正数で負数とで対象性が無い方が望ましい場合もあるでしょう。
    たとえば摂氏温度や華氏温度などでは、ゼロを基準として丸め方が変わると困るので、
    正負によらず中間値が常に切り上げとなるような四捨五入として、
    -1.5 は「-1」、-2.5 は「-2」へと丸めたいこともあります。

    しかし、JIS 規格の『数値の丸め方』では、そのようなパターンは定められていません。

    [JIS Z 8401 : 1999] より引用
    》 この規格では対象となる数値として正の数値しか想定していない。
    》 負の数値を対象とする場合は、その絶対値に適用しなければならない。



    > 3. JisRound(12.251 , 3) → 12.3 ※No84084の値で確認
    > 4. JisRound(12.25 , 3) → 12.2
    > 3と4で両方の結果が異なる理由がよく分かりません。

    今回は、Decimal 型の精度(有効桁数 28.8 桁)での処理ですよね。

    12.251 は、規則 A でも B でも「12.3」になります。
    12.250 は、規則 A では「12.2」、規則 B では「12.3」です。



    有効桁数 3 桁で丸めたときに「12.3」になる十進小数の範囲:

    【規則 A (ToEven) の場合】
    12.250000000000000000000000001D 以上
    12.349999999999999999999999999D 以下

    【規則 B (AwayFromZero) の場合】
    12.250000000000000000000000000D 以上
    12.349999999999999999999999999D 以下


    有効桁数 3 桁で丸めたときに「12.2」になる十進小数の範囲:

    【規則 A (ToEven) の場合】
    12.150000000000000000000000000D 以上
    12.250000000000000000000000000D 以下

    【規則 B (AwayFromZero) の場合】
    12.150000000000000000000000000D 以上
    12.249999999999999999999999999D 以下
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■84101  Re[13]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ 魔界の仮面弁士 -(2017/05/16(Tue) 09:37:09)
    No84097 (魔界の仮面弁士) に追記
    > 当初の質問の仕様が曖昧になってしまっていますので、
    > まずは「正しい仕様」を厳密に定めておくのが先決かと思います。

    ついでに、浮動小数点数(IEEE 754-2008)の丸めについても。


    浮動小数点数の端数処理は 5 パターンが定義されています。
    『最近接丸め(roundings to nearest)』が 2 パターンと
     (1) 偶数丸め (round to nearest, ties to even)
     (2) 0 から遠いほうへ丸め (round to nearest, ties away from zero)
    『方向丸め(directed roundings)』が 3 パターンです。
     (3) 0 方向への丸め(RZ) … いわゆる切り捨て (truncation)
     (4) +∞ 方向への丸め(RI) … いわゆる切り上げ (ceiling)
     (5) -∞ 方向への丸め(RP) … いわゆる切り下げ (floor)



    1 は二進小数の既定のモードで、十進小数でもこれが推奨されています。
    Math.Round の ToEven モードがコレにあたりますし、CInt 等もこの動作です。
    「JIS 丸め」「ISO 丸め」「銀行丸め(banker's rounding)」とも呼ばれるモードです。

    2 は、Math.Round の AwayFromZero モードに相当します。
    先述したように負数の扱いに注意が必要です。

    3 は Math.Truncate メソッドや Decimal.Truncate メソッドに相当します。
    VB の Fix 関数もそうです。

    4 は Math.Ceiling メソッドや Decimal.Ceiling メソッドに相当します。

    5 は Math.Floor メソッドや Decimal.Floor メソッドに相当します。
    VB の Int 関数もそうです。



    これ以外にも、多くの丸め処理があります。
    https://ja.wikipedia.org/wiki/%E7%AB%AF%E6%95%B0%E5%87%A6%E7%90%86


    たとえば業務レベルでは多くの場合、有効桁数で計算する事が一般的であり、時には、
    有効桁数の直後の桁だけをみて、切り上げか切り捨てかを判断することが望まれることもあります。


    ただ、当初の質問はそうした細かい動作について特に言及されていないため、
    JIS 規格の「数値の丸め方」に則った実装にしてみた次第です。


    いずれにせよ、一通りの答えは出ていると思いますので、これらを組み合わせることで、
    望んでいる端数処理を作り上げることができるのではないでしょうか。
記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

次の20件>

<< 0 | 1 >>

パスワード/

- Child Tree -