2011-10-28 5 views
2

私は、ユーザの入力後に浮動小数点数を生成する電卓を設定しています。例として、生成された回答が1.75で、実際には1.75時間を表します。私は答えを2つの部分に分けて、1時間読むことを望みます。 .75分よりもユーザーフレンドリーな45分です。浮動小数点数の目的関数cで、さらに計算を行うための小数点以下を切り離したい

だから私は、小数点は、このようなの0.75 --kindを使用して変数の値を取得する前に、全体の数字(複数可)(この例では「1」)を削除できるようにする必要があります:

私に私に入れて45分の値を与えるだろうMIN =(0.75 * 60)...声明

[NSString stringWithFormat:@"@% hr. @% min", hRs, mIn];タイプ

この上の任意の助けいただければ幸いです。

答えて

0

浮動小数点数をintにキャストし、その値から浮動小数点数を引くことができます。

float time = 1.75; 
int minutes = (time - (int)time) * 60; //or (time - floor(time)) * 60; 

NSLog(@"Time: %@", [NSString stringWithFormat:@"%d hr. %d min", (int)time, minutes]); 
+0

おかげさまで、私はかなり新しいxcodeです...そしてキャストは何かについて知っています(1つは使用されません)。彼らが適用されるごとに簡単に裁断することは可能でしょうか。あなたがキャストした例はありますか? – Rob

+2

floor()はcライブラリ関数です。最大整数値を数値以下の値に丸めます。 – zaph

+0

キャストは2つの方法で演奏します。 "C"言語の本を勉強して研究するのが最善です。Objective-Cは "C"で追加します。 – zaph

1

使用floor(floatValue)、整数部分を取得小数部分を取得するに従ってFloatValueからそれを減算します。

例:

float floatValue = 1.75; 
float integerPortion = floor(floatValue); 
float decimalPortion = floatValue - integerPortion; 

NSString *timeString = [NSString stringWithFormat:@"%.0f hr. %.0f min", integerPortion, decimalPortion * 60]; 
NSLog(@"timeString: %@", timeString); 

のNSLog出力:あなたはほぼ確実に、特に計算のために、ユーザーが入力した番号を格納するfloatを使用したくない

timeString: 1 hr. 45 min 
3

。これにより、10進/ 2進の丸め誤差が発生し、狂気になることがあります。この種の作業にはNSDecimalNumberを使用します。

他の回答はうまくいきますが、floor()decimalNumberByRoundingAccordingToBehavior:に置き換えます。 NSDecimalNumberHandlerの丸めモードはNSRoundDownで、適切なscale(おそらく2または3)を使用します。

関連する問題