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

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

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

No.56300 の関連記事表示

<< 0 >>
■56300  四捨五入をしたいのですが・・・
□投稿者/ 四捨五入 -(2011/01/08(Sat) 17:37:22)

    分類:[.NET 全般] 


    お世話になっております。

    VBS2008を使用しております。OSはXPです。

    四捨五入をのコードを探し回っていますと

    ここにたどり着きました。

    http://jeanne.wankuma.com/tips/vb.net/math/halfadjust.html

    このコードをコピペして使用しようとしてもなぜかエラーになって

    しまいます。

    クラスの方に
    Public Class Class1
    ''' ------------------------------------------------------------------------
    ''' <summary>
    ''' 指定した精度の数値に四捨五入します。</summary>
    ''' <param name="dValue">
    ''' 丸め対象の倍精度浮動小数点数。</param>
    ''' <param name="iDigits">
    ''' 戻り値の有効桁数の精度。</param>
    ''' <returns>
    ''' iDigits に等しい精度の数値に四捨五入された数値。</returns>
    ''' ------------------------------------------------------------------------
    Public Shared Function ToHalfAdjust(ByVal dValue As Double, ByVal iDigits As Integer) As Double
    Dim dCoef As Double = System.Math.Pow(10, iDigits)

    If dValue > 0 Then
    Return System.Math.Floor((dValue * dCoef) + 0.5) / dCoef
    Else
    Return System.Math.Ceiling((dValue * dCoef) - 0.5) / dCoef
    End If
    End Function
    End Class

    そしてForm_Load内にこちらを記述

    ' 有効小数桁数が小数第 2 位になるように四捨五入する
    Dim dValue As Double = ToHalfAdjust(12.325, 2)

    ' 四捨五入した結果を表示する
    MessageBox.Show(dValue.ToString()) '12.33

    しかし・・・名前'ToHalfAdiust'は宣言されていません

    というエラーが返ってきます。

    クラスをあまり使ったことがないので何が悪いのか解りません。

    原因が解る方いらっしゃいましたらおしえてください。
親記事 /過去ログ94より / 関連記事表示
削除チェック/

■56302  Re[1]: 四捨五入をしたいのですが・・・
□投稿者/ επιστημη -(2011/01/08(Sat) 18:03:25)
>
    > しかし・・・名前'ToHalfAdiust'は宣言されていません
    
    Class1のメソッドですから。
    
    Public Class Class1
      Public Shared Function ToHalfAdjust(ByVal dValue As Double, ByVal iDigits As Integer) As Double
        Dim dCoef As Double = System.Math.Pow(10, iDigits)
        If dValue > 0 Then
          Return System.Math.Floor((dValue * dCoef) + 0.5) / dCoef
        Else
          Return System.Math.Ceiling((dValue * dCoef) - 0.5) / dCoef
        End If
      End Function
    End Class
    
    Public Class Form1 
    
      Private Sub Form_Load()
        ' 有効小数桁数が小数第 2 位になるように四捨五入する
        Dim dValue As Double = Class1.ToHalfAdjust(12.325, 2) '←こうすればいいよ
        ' 四捨五入した結果を表示する
        Console.WriteLine(dValue.ToString())  '12.33
      End Sub
    
      Public Shared Sub Main()
        Dim form As New Form1()
        form.Form_Load()
      End Sub
    End Class
    
記事No.56300 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56307  Re[2]: 四捨五入をしたいのですが・・・
□投稿者/ επιστημη -(2011/01/08(Sat) 21:08:58)
>
    クラス名がメソッドのアタマにくっつくのがうぜーなら Module で。
    
    Module Roundings
      Public Function ToHalfAdjust(ByVal dValue As Double, ByVal iDigits As Integer) As Double
        Dim dCoef As Double = System.Math.Pow(10, iDigits)
        If dValue > 0 Then
          Return System.Math.Floor((dValue * dCoef) + 0.5) / dCoef
        Else
          Return System.Math.Ceiling((dValue * dCoef) - 0.5) / dCoef
        End If
      End Function
    End Module
    
    Public Class Form1 
    
      Private Sub Form_Load()
        ' 有効小数桁数が小数第 2 位になるように四捨五入する
        Dim dValue As Double = ToHalfAdjust(12.325, 2)
        ' 四捨五入した結果を表示する
        Console.WriteLine(dValue.ToString())  '12.33
      End Sub
    
      Public Shared Sub Main()
        Dim form As New Form1()
        form.Form_Load()
      End Sub
    End Class
    
記事No.56300 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56310  Re[3]: 四捨五入をしたいのですが・・・
□投稿者/ Azulean -(2011/01/08(Sat) 21:58:32)
    そもそも、なぜ Math.Round を使わないのかなと疑問を持ちました。
    http://msdn.microsoft.com/ja-jp/library/f5898377.aspx

    .NET Framework 1.1 は丸め方の指定ができなかったようですが、2.0 以降は丸めの指定ができます。
記事No.56300 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56309  Re[1]: 四捨五入をしたいのですが・・・
□投稿者/ じゃんぬねっと -(2011/01/08(Sat) 21:58:12)
    No56300 (四捨五入 さん) に返信
    > VBS2008を使用しております。OSはXPです。

    VBS2008? VBScript に新バージョンが!! という冗談はさておき、

    > 四捨五入をのコードを探し回っていますと
    > ここにたどり着きました。

    私が言うのもなんですが、それ .NET1.1 時代に書いたページですので、
    System.Math.Round メソッドを使うようにしてください。
    四捨五入なら、MidpointRounding は AwayFromZero ですね。
記事No.56300 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56318  Re[2]: 四捨五入をしたいのですが・・・
□投稿者/ 四捨五入 -(2011/01/10(Mon) 12:09:38)
    皆様方、解答ありがとうございます。

    おかげで解決に至りましたことをご報告いたします。

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



<< 0 >>

パスワード/

- Child Tree -