2011-12-13 66 views
1

我有一個浮子= 1.30452F分裂浮子

對於我的WPF UI,我需要浮子分爲三個部分:

  • 第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

如果您對十進制值感興趣,是否考慮過使用小數類型? – 2011-12-13 22:18:03

+2

具體而言 - 你想要小數點前的數字(順便說一下,這個數字可以有多少個數字),然後是兩個有效數字,那麼超出這兩個有效數字的所有數字都是? – templatetypedef 2011-12-13 22:18:12

回答

4

略有改進(儘管使用相同的方法)會減少您的字符串操作。我跑了你的原始代碼100萬次,並做了一個計時器,它是~890ms。這一變化將下降到328毫秒。一個體面的改善。

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);