|
> プログラマが根本的に理解していないようでは、やはりバグが生まれると思うからです。
至極もっともなご意見で恐れ入ります。私自身.NETでの開発経験がないのでメンバーにレクチャー
できるかどうか自信がないのでなんとか手法で逃げようとしていたのかも知れません。
> SQLServerから出し入れするときに小数部2桁で扱うということですよね?
> プログラム内部では小数部3桁以上を持つことになると思います。(でないと丸め方を選べない)
最初は下記のようにSQL Serverの結果と一致するように固定小数点型をエミュレート?するような
ものを考えていたのですが、何か方向性が違うような気がしていた次第です。
-----------------------------------------------------------------------------------
Option Strict On
Imports System.Data.SqlTypes
Public Class Class1
Shared Sub main()
Dim d As Decimal = 1D
Dim d2 As Decimal = d / 3D
Dim d3 As Decimal = d2 * 3D
Dim d4 As Decimal = (1D / 3D) * 3D
MessageBox.Show(d3.ToString & ":" & d4.ToString)
Dim c As New Currency(19, 4)
Dim c2 As New Currency(19, 4)
Dim c3 As New Currency(19, 4)
Dim c4 As New Currency(19, 4)
c.Value = 1D
c2.Value = c.Value / 3D
c3.Value = c2.Value * 3D
c4.Value = (1D / 3D) * 3D
MessageBox.Show(c3.Value.ToString & ":" & c4.Value.ToString)
End Sub
End Class
Public Structure Currency
Private _Value As SqlDecimal
Private _Presition As Integer
Private _Scale As Integer
Public Sub New(ByVal p As Integer, ByVal s As Integer)
_Presition = p
_Scale = s
End Sub
Public Property Value() As SqlDecimal
Get
Return _Value
End Get
Set(ByVal sd As SqlDecimal)
_Value = SqlDecimal.ConvertToPrecScale(sd, _Presition, _Scale)
End Set
End Property
End Structure
-----------------------------------------------------------------------------------
【SQL Server】
declare @d decimal(19,4)
declare @d2 decimal(19,4)
declare @d3 decimal(19,4)
declare @d4 decimal(19,4)
set @d = 1.
set @d2 = @d / 3.
set @d3 = @d2 * 3.
set @d4 = (1. / 3.) * 3.
select str(@d3,19,4) + ':' + str(@d4,19,4)
結果:0.9999:1.0000
|