2011-12-13 4 views
1

私は=私のWPF UIについては1.30452F分割フロート

をフロートを持って、私は三つの部分にフロートを分割する必要があります。

  • パート1:1.30
  • パート2 :45
  • パート3:2

作業溶液は次のとおりです。

float myFloat = 1.30452F; 

string part1 = myFloat.ToString("0.00"); 
string part2 = myFloat.ToString().Substring(4,2); 
string part3 = myFloat.ToString().Substring(6); 

は、誰もがフロートを分割するよりパフォーマンスエレガント方法を持っていますか?

+0

10進数値に興味がある場合は、代わりに10進数型を使用することを検討しましたか? –

+2

具体的には、小数点より前の数字(2桁の数字は有効ですか? – templatetypedef

+0

0.00000または0.0000となります。フロートは私にとっては良い選択です。私はもっ​​と必要はありません –

答えて

4

(同じ方法を使用していますが)少し改善すれば、文字列操作が少なくなります。私はオリジナルのコードを100万回走らせてタイマーをかけたところ、890msでした。この変更により、328msまで低下します。まともな改善。

string myString = myFloat.ToString(); 
string part1 = myString.Substring(0, 4); 
string part2 = myString.Substring(4, 2); 
string part3 = myString.Substring(6); 

part1には最初の4文字以上のものが必要ですが、ここに数学のバージョンがあります。これは31msで実行されます。

float part1 = (int)(myFloat * 100F)/100F; 
int part2 = (int)((myFloat - part1) * 10000F); 
int part3 = (int)((myFloat - part1 - (part2/10000F)) * 100000); 
+0

+ 1-私の最初の考えは、文字列解析とキャストとの比較でした。乗算が実際の値を変更しないことを保証するためにテストする必要があります(浮動小数点数は操作時にわずかに変化する可能性があるため)。 –

+0

キャストする前に数学操作中に浮動小数点数を使用するようにしました。私は提出する前にいくつかの異なる値でテストを行いました。しかし、私は同意する、さらなるテストが正当です。テストは常に良いです! –

+0

ありがとうAndy :)私はテストを続けます;) –