2012-04-13 72 views
2

在我的應用程序(WCF,REST,.NET)中的一個對象請求中,我得到了double類型的值。我需要這個方法來正確實現帶有小數部分「,」和「。」的數字。如何安排它而不訴諸字符串的類型。例如:值「3,25」或「3.25」應被視爲與double的類型相同。與區域設置相關的雙精度類型的問題

示例代碼:

這是在請求對象

[DataContract] 
public class TripRatesMapped 
{ 
    [DataMember(IsRequired = true)] 
    public double Tolls { get; set; } 

    [DataMember(IsRequired = true)] 
    public double Parking { get; set; } 

    [DataMember(IsRequired = true)] 
    public double ExtraGr { get; set; } 

    [DataMember(IsRequired = true)] 
    public double Misc1 { get; set; } 

    [DataMember(IsRequired = true)] 
    public double Misc2 { get; set; } 

} 

使用的類,這是請求對象

{ 「ExtraGr」 的一部分: 1.25, 「Misc1」:1.26, 「Misc2」:1.27,0.「Parking」:1.28, 「Tolls」:1.29 }

我需要這樣我就可以做這種形式的請求:

{ 「ExtraGr」:1,25, 「MISC1」:1,26, 「Misc2」:1,27, 「停車場「:1,28, 」Tolls「:1,29 }

是否有可能不使用字符串類型?

+1

沒有給出關於上下文(應用程序,編程語言,操作系統等)的更多細節,很難回答你的問題。 – assylias 2012-04-13 09:28:19

+0

「對象請求」是什麼意思?如果你解析數字,那麼他們必須是字符串,而不是雙打?你能提供一些示例代碼嗎? – 2012-04-13 09:42:56

回答

1

如果您使用客戶端的語言環境,則應該能夠將它們鍵入的內容轉換爲可在內部使用的雙精度型。打印該值時需要再次使用該區域設置。

使用此TryParse超載:

string value = "3,25"; 
NumberStyles style = NumberStyles.Number; 
CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR"); 
if (Double.TryParse(value, style, culture, out number)) 
    Console.WriteLine("Converted '{0}' to {1}.", value, number); 
else 
    Console.WriteLine("Unable to convert '{0}'.", value); 

如果省略CultureInfo變量將使用當地的文化解析文本。

通過加入CultureInfo,您可以依次嘗試不同的文化,從而建立一定的韌性,直到您獲得有效的雙倍或用盡選項。這樣做的主要缺點是,如果有人發生打字錯誤或者您以錯誤的順序檢查文化,您可能會得到錯誤的編號。如果有人輸入「35,500」,並且首先檢查法國文化,您將獲得35.5而不是35500.0

+1

我認爲這個WCF服務不使用客戶端的區域設置。相反,它接受來自不同語言環境的數據並自動綁定它們。所以應該有一個暗示使用不變的文化或類似的東西。 – 2012-04-13 11:29:32

+0

@AntonPalyok - 理論依然成立 - 如果OP想接受來自不同文化的輸入,他需要一些指定方式。 – ChrisF 2012-04-13 11:31:55