[英]Trying to parse a string entry into a double but the point for the decimal is never recognized
對此有多個線程,他們說要使用 CultureInfo,但對我來說沒有任何效果。
我有一個 Xamarin.Forms 應用程序,用戶輸入一個字符串值,可以寫成 90、90.1 或 90,9。 然后將該值轉換為 double 以進行一些計算。
xamarin 輸入組件具有“數字”屬性,因此用戶只能輸入數字和點或逗號,具體取決於設備的語言。
因為我一開始不知道語言對點或逗號很重要,所以這是我的第一個實現:
public static double CalculateExposition(TasksGroup group)
{
return Math.Round(10 * Math.Log10(group.Taches.Sum(x =>
GetDuration(x.TaskDuration).TotalHours * Math.Pow(10, double.Parse(x.TaskDBA.Replace(",", ".")) / 10.0)) / 8), 1);
}
您可以在下面看到更多詳細信息,非常感謝您的幫助。
問題
這在 VS 2017 上使用法語模擬器運行良好(不知何故,我沒有鍵盤限制,可以做逗號和點),直到我將我的應用程序從 vs 2017 升級到 2019 並使用使用 . 為小數點。
當我嘗試使用英文模擬器時,這一點永遠不會被識別,所以如果我輸入 90.9,它將被識別為 909。
我嘗試過的(在所有線程中他們都說要使用 CultureInfo 但它對我沒有任何作用)
我嘗試的另一件事是為鍵盤實現自定義渲染器,它允許用戶使用 , 或 . 但顯然我需要它基於語言。
public static double CalculateExposition(TasksGroup group)
{
return Math.Round(10 * Math.Log10(group.Taches.Sum(x =>
GetDuration(x.TaskDuration).TotalHours * Math.Pow(10, double.Parse(x.TaskDBA.Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture) / 10.0)) / 8), 1);
}
您可以使用此擴展方法:
static class StringExtensions
{
private static readonly CultureInfo Fr = new CultureInfo("fr-FR");
public static decimal ToDecimal(this string value)
{
if (value.Contains(','))
return decimal.Parse(value, Fr);
return decimal.Parse(value, CultureInfo.InvariantCulture);
}
}
如果輸入字符串包含逗號,則使用法語文化對其進行解析。 如果沒有,它將包含一個點或什么都不包含。 所以用InvariantCulture
(英國文化)解析它就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.