2011-05-20 14 views
11

私のデータベースにmoneyフィールドを持つテーブルがあります。エンティティを作成し、そのmoneyフィールドの小数点以下のプロパティを作成しました。そのフィールドの値がMy MVC3ビューに表示されるとき、それは5489.0000のように小数点以下4桁の0000を持ちます。私は00か小数点以下2桁しか表示しません。どうすれば修正できますか?なぜ小数点4桁まで表示しているのですか?小数点/貨幣フィールドの小数点以下2桁

お勧めします。

答えて

16

SQL Serverのmoneyデータ型は、内部的に小数点以下4桁の暗黙的な縮尺の64ビット整数です。書籍オンラインを引用すると、正確には「通貨単位の1000千分の1」になります。それは、decimal(19,4)のおおよその等価です。

2よりもスケールが4の理由は、演算結果の精度を維持するためです。通常の通貨の値は2のスケール(たとえば、$ 3.27)です。小数点以下2桁に2つの数値を掛けたり、除算したりすると、9.23を3.27で割った結果が2.82262996941896(およそ)になります。結果は、の精度(小数点以下の桁数)にすることができます。ただし、元の値は小数点以下2桁まで正確であるため、の精度は〜小数点以下4桁(2.8226)になります。この測定値は、指定された最小単位の1/2以内(+/- 0.005)に正確です。

しかし、私は逃げます。

値が暗黙スケール4を持つSQL Server moneyの結果として、ADO.Netは、この値を4のスケールでSystem.Decimalに変換します。また、System.Decimalは、文字列の場合、小数点以下4桁が得られます。

が少ない取得するには、することができます適切な Decimal.Round()オーバーロードを使用して変換前

  • ラウンドそれを、または必要に応じて、それが(例えば。(3.27M).ToString("0.00") ;

ホープ、このことができます

  • フォーマット。

    このプログラム:

    namespace Sandbox 
    { 
        using System ; 
        class Program 
        { 
        static void Main(string[] args) 
        { 
         decimal pi  = (decimal) Math.PI ; 
         string piText = pi.ToString("0.00"); 
         Console.WriteLine("PI to 2 decimal places is {0} one way, and {1:0.00} another" , piText , pi) ; 
         return; 
        } 
        } 
    } 
    

    は、あなたが期待するもの生み出し:

    PI to 2 decimal places is 3.14 one way, and 3.14 another 
    

    乾杯、

    N.

  • +1

    私は10進数を使用していますか?とToString( "0:00")を使用することはできません。 – DotnetSparrow

    +0

    誰かが.Netランタイムにそれを伝えるべきです。私の元の回答の例を参照してください。 –

    +0

    DevExpressコンポーネントでdoresを作成することはできません。 – f470071

    6

    static void Main() 
    { 
        decimal x = 0.999m; 
        decimal y = 9999999999999999999999999999m; 
        Console.WriteLine("My amount = {0:C}", x); 
        Console.WriteLine("Your amount = {0:C}", y); 
    } 
    

    }

    OUTPUT: 出力

    マイ量= $ 1.00
    あなたの額= $ 9,999,999,999,999,999,999,999,999,999.00

    それはあなたが表示したいお金があるならば、あなたが行うことができます

    一つのこと

    {0:C}は通貨形式です

    希望すると、これが役立ちます。

    +0

    こんにちは@ニコ:私は金額を$を入れたくありません。 string.format( "{0:C}"、amount)はどのように変更できますか? – DotnetSparrow

    +0

    あなたはdecimal dec = 5489.0000Mと言うことができます。 dec.ToString( "0.00"); – NicoTek

    0

    を私はこれを使用し、それが働いた:

    YourDecField.ToString("N") 
    
    関連する問題