2010-05-07 24 views
5

我在我的程序中添加了一項功能,用戶可以隨時更改其度量單位,並讓程序重新計算其輸入和輸出。C#中的度量單位轉換邏輯

如果用戶輸入一個項目20磅,然後決定他想以千克爲單位工作,他可以​​隨時選擇一個選項來執行此操作,程序將重新計算他​​的20磅輸入爲9公斤。那麼如果他決定他寧願在盎司工作,它會將9Kg轉換爲320oz,等等。

什麼是最有效和最有效的方法呢?我一直在努力尋找一種方法來實現正確的公式。

回答

14

以標準單位(或您喜歡使用的單位)進行所有計算。

  • 將用戶的輸入從他們希望的任何內容轉換爲標準單位。
  • 使用標準單位進行計算。
  • 將答案轉換回用戶想要的單位。

只有用戶界面需要關心單位轉換。其餘代碼不需要擔心。

+0

我同意。不要從以前的單位轉換,你會失去精度。 – 2010-05-07 21:15:44

+2

......否則你的着陸器將會超調並飛入太空或在輝煌的火球中撞擊地面! ;) – FrustratedWithFormsDesigner 2010-05-07 21:16:51

+4

我建議使用SI單位來存儲數據庫中的信息(或者存儲數據的任何內容)。 – msarchet 2010-05-07 21:16:52

4

在內部存儲已知測量單位的值(例如,以千克爲單位存儲所有數據)並且有方程可以將已知單位轉換爲其他所有單位。

基本上你只需要轉換顯示單位,所有的內部計算都可以在一個單元中完成。

作爲一個弧線球,F#有一個強大的計量單位機制內置的,如果你看中的東西尖端一起玩......

0

在,我已經下了「單位」上,我們有單獨的類工作程序命名空間,如Units.Torque或Units.Length。

如果您創建一個像Units.Weight這樣的類,並將所有轉換因子設置爲常量值,將可能的單位設置爲枚舉,則可以調用該類並將其轉換爲所需的單位。這是我們使用的系統的一個非常簡單的例子:

namespace Units 
{ 
    class Weight 
    { 
     public enum WeightType 
     { 
      kg, 
      lb 
     } 

     const double kgTolbs = 2.20462262; 

     public static double Convert(double value, WeightType fromUnits, WeightType toUnits) 
     { 
      //Code here to convert units 
     } 
    } 
} 

有了這個結構,你可以轉換爲和從任何單位類型在您的休閒。