web-dev-qa-db-ja.com

10進変数を整数部と小数部に分割

小数値から整数部分と小数部分を抽出しようとしています(両方の部分は整数である必要があります):

decimal decimalValue = 12.34m;
int integral = (int) decimal.Truncate(decimalValue);
int fraction = (int) ((decimalValue - decimal.Truncate(decimalValue)) * 100);

(私の目的では、10進数の変数には小数点以下2桁までが含まれます)

これを達成するためのより良い方法はありますか?

20
invarbrass
       decimal fraction = (decimal)2.78;
        int iPart = (int)fraction;
        decimal dPart = fraction % 1.0m;
17
Girish Sakhare
decimal fraction = doubleNumber - Math.Floor(doubleNumber) 

またはそのようなもの。

3
OMARY

数学的な定義を試してください:

var fraction = (int)(100.0m * (decimalValue - Math.Floor(decimalValue)));

パフォーマンスの点では優れていませんが、少なくとも負の数では機能します。

2
SOReader

どうですか:

int fraction = (int) ((decimalValue - integral) * 100);
1
Barry Kaye

分数を取り出すには、 このソリューション を使用できます。

Math.ceil(((f < 1.0) ? f : (f % Math.floor(f))) * 10000)
1
Aamol