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

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

C# と VB.NET の入門サイト

Re[2]: 四捨五入をしたいのですが・・・


(過去ログ 94 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■56300 / inTopicNo.1)  四捨五入をしたいのですが・・・
  
□投稿者/ 四捨五入 (1回)-(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'は宣言されていません

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

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

原因が解る方いらっしゃいましたらおしえてください。

引用返信 編集キー/
■56302 / inTopicNo.2)  Re[1]: 四捨五入をしたいのですが・・・
□投稿者/ επιστημη (2587回)-(2011/01/08(Sat) 18:03:25)
επιστημη さんの Web サイト
> しかし・・・名前'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

引用返信 編集キー/
■56307 / inTopicNo.3)  Re[2]: 四捨五入をしたいのですが・・・
□投稿者/ επιστημη (2590回)-(2011/01/08(Sat) 21:08:58)
επιστημη さんの Web サイト
クラス名がメソッドのアタマにくっつくのがうぜーなら 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

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

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

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

私が言うのもなんですが、それ .NET1.1 時代に書いたページですので、
System.Math.Round メソッドを使うようにしてください。
四捨五入なら、MidpointRounding は AwayFromZero ですね。
引用返信 編集キー/
■56310 / inTopicNo.5)  Re[3]: 四捨五入をしたいのですが・・・
□投稿者/ Azulean (674回)-(2011/01/08(Sat) 21:58:32)
そもそも、なぜ Math.Round を使わないのかなと疑問を持ちました。
http://msdn.microsoft.com/ja-jp/library/f5898377.aspx

.NET Framework 1.1 は丸め方の指定ができなかったようですが、2.0 以降は丸めの指定ができます。
引用返信 編集キー/
■56318 / inTopicNo.6)  Re[2]: 四捨五入をしたいのですが・・・
□投稿者/ 四捨五入 (2回)-(2011/01/10(Mon) 12:09:38)
皆様方、解答ありがとうございます。

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

ありがとうございました。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -