2016-10-28 19 views
3

2価格をデータ型文字列とどのように比較するのかと思います。2つの価格をcのデータ型文字列と比較する#

例; newPriceは> = oldPriceが、小数/ int型に文字列を変換する方法がわからないイムする場合

string oldPrice = "£1.99"; 
string newPrice = "£2.50"; 

は、私が比較したいです。 £記号を取り除く。

アイデア?ヒントやこれに取り組む方法に関するヒント?

答えて

7

これは動作するはずです。小数点タイプは、基数10の数字(通貨/財務計算で使用される数字など)を表すときにのみ正確です。一般に、double型は、任意の実数に対して、少なくとも非常に高い精度とはるかに高速な速度を提供することになります。 decimalまたはdoubleをいつどこで使用するかについては、thisthisのリンクを参照してください。

またhereからTriynkoさんのコメント@チェックアウト:

あなたがお金のために小数を使用する理由はここにあります:ダブルの精度はわずか16 桁で、わずか数算術OPSた後、エラーが 迅速大きな蓄積されます15,14,13などに入るまでに十分です。 数字。 "セント"を丸めるには、セントの後に完全な の精度の少なくとも1桁が必要ですが、実際には、 セントの丸めに使用する列を壊すことを許可しない累積算術的な誤差から、 を控除してください。あなたは16(合計) - 2(セント) - (4または5エラーパディング)= oh $ヒット あなたのお金のために7(またはそれ以下)の信頼できる整数の数字で を残します!

+3

通貨をダブルとして保存するのはなぜですか?多分あなたはあなたの答えでそれを説明する必要があります:) – Pikoh

+0

@ピコ私は[this](http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-when )あなたの質問に答えます。 – SeM

+0

私は答えSeMを知っています。私はそれを完了するためにあなたの答えでそれを説明することを提案していました – Pikoh

3
if(decimal.Parse(newPrice, System.Globalization.NumberStyles.Currency) >= decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency)){ 
    // Do something here 
} 

あなたはまた、彼らは実際には、ベース2の数字として格納されているとして、我々は我々が話しているベース-10の数字を気一方で、フロートの通貨を格納するための良いアイデアではありませんdouble.Parse(...)を使用することができなくなりお金。したがって、いくつかの小数点を表すことはできませんので、期待しない方法でラウンドします。通貨価値について数学を行うときに最後に望むことは、丸めのためにお金を失うことです!

さらに詳しい説明はhereを参照してください。 doubleない良い考えであるとして、通貨の保存

string oldPrice = "£1.99"; 

decimal result = decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency); 

、代わりにdecimalを使用する方が良いでしょう: