2016-10-20 8 views
0

これはちょっとした質問です。私は似たような質問を見回しましたが、私の質問に具体的に答えるものは見つかりませんでした。10進数を小数点以下2桁まで切り捨てます。小数点以下2桁を超える場合を除きます。

私はwinformsアプリケーションを作っています。これは、とりわけ数値のアップダウンからデータを取得し、Wordの変数に配置します。数字のアップダウンの小数点以下4桁の精度は、例えば印刷契約の場合の€0,0125のような価格があるためです。しかし、他の価格は、たとえば€12,5000のように節約されます。私は現在、このような小数点以下2桁に数字を修正:

string value = type.GetValue().ToString().Trim(new char[] { '\'' }); 
//Changes commas for European standard and removes the excess zeros after the comma. 
if (type.GetType().ToString().EndsWith("Decimal")) 
{ 
    string s; 
    string sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; 
    if (sep == ".") 
     s = double.Parse(value).ToString("n2").Replace('.', ','); 

    else 
     s = double.Parse(value).ToString("n2"); 

    wordDoc.Variables[type.GetName()].Value = s; 
} 
else 
    wordDoc.Variables[type.GetName()].Value = value; 

しかし、私は、小数点がトリミングされませすべきときを検出する方法を見つけ出すように見えることはできません。私は必ずしもコード例が必要なわけではありません。もし誰かが私を正しい軌道に送ることができれば、大きな助けになるでしょう。

NB:数値アップの精度を変更することは、メソッドによって動的に作成されるため実際にはオプションではありません。

+0

は、あなたはそれが動作するようにする方法のいくつかの例を与えることはできますか? – NibblyPig

+0

小数点が '12,5000 'のときは、' 12,50'を表示します。 '0,125'や' 0,1250'のときは、 '0,125'を表示する必要があります – TCDutchman

答えて

2

ちょうどcustom format string - #,##0.00##を使用すると、最低2 d.p.が表示されます。最大4d.p.

decimal x = 12.50000m; 
decimal y = 0.0125m; 

string sx = x.ToString("#,##0.00##"); // "12.50" 
string sy = y.ToString("#,##0.00##"); // "0.125" 

あなたはコンマ小数点区切りをしたい場合は、適切なCultureInfoを使用するか、正しいプロパティを持つNumberFormatInfoを作成し、次のいずれか

var nfi = new NumberFormatInfo 
{ 
    NumberDecimalSeparator = ",", 
    NumberGroupSeparator = ".", 
}; 

string s = 1234.56m.ToString("#,##0.00##", nfi); // "1.234,56" 
+0

うわー、私は本当にカスタムフォーマット文字列について学ぶ必要があります。本当にありがとう! – TCDutchman

関連する問題