7

NSDecimalnumber から整数値と小数値を取得する方法がわかりません。

たとえば、10,5 がある場合、どうすれば 10 & 5 を取得できますか?

10 と 5 がある場合、10,5 に戻すにはどうすればよいでしょうか?


うーん、よかったです。

ただし、小数を失うことについて懸念があります。

これは、国際的なアプリ用です。たとえば、ユーザーが価格「124,2356」を設定した場合、正確な数値を読み込んで保存します。


うーん、その通りですが、小数点以下の桁数を尊重しません。現在のローカルからそれを知る方法があれば、私は設定されています。

これは、通貨の値を表しているためです...

4

4 に答える 4

20

これは通貨用であると言ったので、スケールに2を使用していますが、別の丸めスケールを使用することを選択できます. これは非常に単純な例であるため、丸めによって発生する可能性のある例外も無視しています。

NSDecimalNumberHandler *behavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:0 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
NSDecimalNumber *price = /* eg. 10.5 */;
NSDecimalNumber *dollars = [price decimalNumberByRoundingAccordingToBehavior: behavior];
NSDecimalNumber *cents = [price decimalNumberBySubtracting: dollars];

dollarsこれにより、変数と変数にそれぞれ 10 と 0.5 が与えられますcents。整数が必要な場合は、このメソッドを使用してcents10 の累乗を掛けることができます。

cents = [cents decimalNumberByMultiplyingByPowerOf10: 2];

centsこれにより、100が掛けられ、dollarsとで 10 と 5 が得られcentsます。また、ここで 10 の負の累乗を使用して除算できることも知っておく必要があります。

そう、

cents = [cents decimalNumberByMultiplyingByPowerOf10: -2];

その最後の方法を元に戻します。

于 2009-01-29T14:39:50.323 に答える
0

数学関数にアクセスできない場合、これでうまくいくかもしれません:

double val = [dn doubleValue]; // dn is a NSDecimalNumber*
int intPart = (int) val;
double doublePart = (val - intPart); 

これにより問題が発生する可能性があり、ループが終了しない可能性があります。その場合、そこにカウンターを配置する必要があります。

while (doublePart != (int)doublePart) doublePart*=10;
于 2009-01-28T19:05:37.203 に答える
-1

double floor (double x);POSIX関数です。この関数を使用して、 を超えない最大の整数値を見つけることができますx

double x = 10.5;

double y = floor (x);
// y = 10.0

double z = x - y;
// z = 0.5
于 2009-01-28T21:15:26.597 に答える