koido Blog

XPerの日々

AILight Banner
AILight Blog

プロフィール

koido Blog

目次

Blog 利用状況

記事分類

過去の記事

タグ

DecimalのToStringの動作

.Net Framework2.0のDecimalのToStringの動作は、内部表現の状態により異なるので注意が必要です。

以下サンプルプログラムです。

        Dim d1 As Decimal
        Dim d2 As Decimal

        d1 = Decimal.Parse("1")

        d2 = Decimal.Parse("1.0")

        If d1 = d2 Then
            Console.WriteLine("Decimalでは、このIF文は正常に判断される")
        End If

        If d1.ToString() <> d2.ToString() Then
            Console.WriteLine(vbCr + vbLf + "文字列で比較すると異なると判断される")
            Console.WriteLine("理由は、Decimalの内部表現がToStringに影響するため")
            Console.WriteLine("d2 [{0}]", d1.ToString())
            Console.WriteLine("ans[{0}]", d2.ToString())
        End If

NUnitで、いろいろ試したサンプル。

<TestFixture()> Public Class DecimalTest

    <Test()> Public Sub Decimalテスト()
        Dim value1 As Decimal
        Dim value2 As Decimal
        Dim value3 As Decimal

        Dim value4 As Decimal

        value1 = 2.375D
        value2 = 1.625D
        value3 = value1 + value2

        value4 = 4D

        Assert.IsTrue(value3 = value4)

        Assert.AreEqual("4.000", value3.ToString())
        Assert.AreEqual("4", value4.ToString())

    End Sub

    <Test()> Public Sub Decimalテスト3()
        Dim value1 As Decimal
        Dim value2 As Decimal
        Dim value3 As Decimal

        Dim value4 As Decimal

        value1 = 2.5D
        value2 = 2D
        value3 = value1 * value2

        value4 = 5D

        Assert.IsTrue(value3 = value4)

        Assert.AreEqual("5.0", value3.ToString())
        Assert.AreEqual("5", value4.ToString())

    End Sub

    <Test()> Public Sub Decimalテスト2()
        Dim value1 As Decimal

        Dim value2 As Decimal

        value1 = Decimal.Parse("4.000")

        value2 = 4D

        Assert.IsTrue(value1 = value2)

        Assert.AreEqual("4.000", value1.ToString())
        Assert.AreEqual("4", value2.ToString())

    End Sub

    <Test()> Public Sub Decimalテスト4()
        Dim value1 As Decimal
        Dim value2 As Decimal
        Dim value3 As Decimal

        value1 = 1.01D
        value2 = 1.05D
        value3 = value1 * value2

        Assert.AreEqual("1.0605", value3.ToString())

    End Sub

    <Test()> Public Sub Decimalテスト5()

        Dim value1 As Decimal
        Dim value2 As Decimal
        Dim value3 As Decimal
        Dim value4 As Decimal

        value1 = 1.05D
        value2 = 1.05D
        value3 = value1 - value2
        Assert.AreEqual("0.00", value3.ToString())

        value3 = value1 * value2 - value1 * value2
        Assert.AreEqual("0.0000", value3.ToString())

        value4 = value3 + 0.1D
        Assert.AreEqual("0.1000", value4.ToString())

    End Sub

    <Test()> Public Sub Decimalテスト6()

        Dim value1 As Decimal
        value1 = Decimal.Parse("0.000")

        Dim value2 As Decimal
        value2 = value1 * 1.05D
        Assert.AreEqual("0.00000", value2.ToString())

    End Sub

    <Test()> Public Sub Decimalテスト7()

        Dim value1 As Decimal
        Dim value2 As Decimal
        value1 = Decimal.Parse("100.000")
        value2 = Decimal.Parse("1.050")

        Dim value3 As Decimal
        value3 = value1 * value2
        Assert.AreEqual("105.000000", value3.ToString())

        Dim value4 As Decimal
        value4 = value3 * value3 * value3
        Assert.AreEqual("1157625.000000000000000000", value4.ToString())

    End Sub

    <Test()> Public Sub Decimalテスト8()

        Dim value1 As Decimal
        Dim value2 As Decimal
        value1 = Decimal.Parse("100.000")
        value2 = Decimal.Parse("1.000")

        Dim value3 As Decimal
        value3 = value1 * value2
        '1をかけても、小数桁が伸びる
        Assert.AreEqual("100.000000", value3.ToString())

        Dim value4 As Decimal
        value4 = value3 * value2 * value2 * value2
        Assert.AreEqual("100.000000000000000", value4.ToString())

        Dim value5 As Decimal
        value5 = value4 * value2 * value2 * value2 * value2 * value2 * value2 * value2
        '小数桁がどんどん伸びる
        Assert.AreEqual("100.00000000000000000000000000", value5.ToString())

        Dim value6 As Decimal
        value6 = value4 * value2 * value2
        '最大桁まで増えると短くなることもある。
        Assert.AreEqual("100.000000000000000000000", value6.ToString())

    End Sub


End Class

投稿日時 : 2008年1月17日 14:27


コメントを追加

#  草間彌生 ヴィトン 2013年1月25日 9:31 草間彌生 ヴィトン

恋っていぅほど素晴らしく無いんで。 えぇ

#  スーパーコピー ルイヴィトン 2013年2月1日 0:44 スーパーコピー ルイヴィトン

リシュモン傘下英倫贅沢な紳士服や皮具ブランドダンヒル(Alfred近日Dunhill)を任命したと発表しEraldo Polettoを最高経営責任者は、2012年11月5日から発効する ヴィトン モノグラム ビニール コピー。

#  バーバリー トレンチコート 2013年3月11日 16:01 バーバリー トレンチコート

突然訪問します失礼しました。あなたのブログはとてもすばらしいです、本当に感心しました!

#  ルイヴィトン バッグ 2013年7月5日 18:33 ルイヴィトン バッグ

こんにちは、またブログ覗かせていただきました。また、遊びに来ま~す。よろしくお願いします

#  スーパーコピーブランドN品 2019年10月23日 22:22 スーパーコピーブランドN品

初めての購入で散々悩んだあげくこちらで購入しました。商品にはとても満足しています。発送も迅速でしたし、梱包も手書きの手紙が同封してあったり、商品梱包してあるパッキンをとめてるセロハンテープもはがしやすい様に工夫してあったりと、細かい気配りがとても良いと思いました。良い所と取引できてよかったです。

#  ルイヴィトン スーパーコピー ランキング 2020年2月28日 3:23 ルイヴィトン スーパーコピー ランキング

迅速な対応の上、情報量も多かったので、とても安心できました。梱包もすごく丁寧で美しさを感じました。
配送も早くて驚きました。ありがとうございました。
また、利用したいと思います。

#  ヴィトン手帳 2020年3月12日 4:21 ヴィトン手帳

とても迅速丁寧で
素晴らしいと思います。
お振り込みしたら
すぐお返事が来て
その日の内に
発送して下さいました!
商品は、まだですが
とても素敵なショップさんなので
先にショップレビューだけさせて頂きました。
また何か購入したいと思います。

#  スーパーコピーブランド 2020年5月9日 0:24 スーパーコピーブランド

レビューが遅くなり、申し訳ありません。大変綺麗なお品でした。迅速丁寧な、梱包発送でした。機会がありましたら、また利用させていただきます、ありがとうございました。
タイトル
名前
URL
コメント