簡體   English   中英

將字符串轉換為浮點數時,為什么會出現FormatException?

[英]Why do I get a FormatException when converting a string to a float?

當我嘗試將字符串轉換為float時:

Console.WriteLine(float.Parse("6.59"));

它拋出一個異常:

未處理的異常:System.FormatException:輸入字符串的格式不正確。
在System.Number.ParseSingle(字符串值,NumberStyles選項,NumberFormat信息numfmt)

當我這樣嘗試時:

Console.WriteLine(Convert.ToSingle("6.59"));

它拋出相同的異常:

未處理的異常:System.FormatException:輸入字符串的格式不正確。
在System.Number.ParseSingle(字符串值,NumberStyles選項,NumberFormat信息numfmt)
在System.Convert.ToSingle(字符串值)

您能解釋為什么會這樣嗎?

單參數Parse方法使用當前區域性來分析字符串。 如果您當前的區域性使用其他十進制分隔符,則將失敗。

嘗試使用不變文化:

float.Parse("6.59", CultureInfo.InvariantCulture)

這里的問題是你的文化。

設置像這樣的不變文化:

float.Parse("6.59", CultureInfo.InvariantCulture)

或為您的文化使用正確的十進制分隔符

float.Parse("6,59")

我想知道為什么您要使用文字字符串。 如果您在輸入文字浮點數時遇到問題,可以使用

Console.WriteLine(6.59f)

如果采用這種方式,文化就沒有關系,因為價值是在編譯時決定的。

您可能正在使用的是使用了一種文化,作為小數分隔符。

您可以嘗試使用InvariantCulture進行解析

float.Parse("6.59", CultureInfo.InvariantCulture)

語言環境/文化可能存在問題。 您需要設置,而不是. 小數點分隔符。

文化-特定的事物。 您的默認文化是什么? 有些文化使用“,”代替“。”。 您可以嘗試以下方法:

float.Parse("6.59", CultureInfo.InvariantCulture);

我知道這里的每個人都已經給出了遇到此問題的原因,但是也許有人應該就Invariant修復它的原因進行擴展。

CultureInfo類由格式化,解析或處理區域性特定數據的類(例如String,DateTime,DateTimeOffset和數字類型)直接或間接使用,以處理不同區域性寫入這些類型的方式上的差異。

對於十進制類型,某些區域性使用句點(。),而另一些區域使用逗號(,)。 默認情況下,當您使用轉換庫時,它將利用您的本地文化(即您要配置操作系統的國家/地區)。

通過指定不變式,您可以說與大多數區域性一樣,您希望千位分隔符為逗號(,),十進制分隔符為句點(。)。

有時會發生的一個大問題是,從OS的角度來看,這些文化習俗會發生變化。 例如,南非(ZA)的文化信息過去表現得像不變文化。 微軟在Windows 8中對此進行了更改,在Windows 8中,小數點突然變成了逗號,千位分隔符變成了空格。這導致許多用.Net編寫的舊系統在將其遷移到較新的操作系統時突然中斷。

最后,deal將所有本地文化信息標准化為不變的,並以這種格式在您的業務邏輯中進行處理。 然后將其本地化回前端。 對於DateTime也是如此,盡快轉換為UTC,只有在呈現輸出時才返回。

您也可以嘗試Convert類來執行此任務。

Convert.ToDecimal(“ 6.59”);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM