簡體   English   中英

將字符串轉換為double或float c#

[英]Convert string to double or float c#

我需要將字符串轉換為double。 或漂浮,無論什么最適合這種類型的轉換。

字符串是“25.00”。

我如何轉換這個字符串,以便我可以在計算中使用它?

我嘗試過:

string s1 = "2";
string s2 = "25.00";

double d1 = Convert.ToDouble(s1);
double d2 = Convert.ToDouble(s2);
double d3 = d2 * d1;

我也試過這個:

string s1 = "2";
string s2 = "25.00";

double d1 = double.Parse(s1);
double d2 = double.Parse(s2);
double d3 = d2 * d1;

和:

string s1 = "2";
string s2 = "25.00";

float f1 = float.Parse(s1);
float f2 = float.Parse(s2);
float f3 = f2 * f1;

這似乎都不起作用,我得到了一個形式感覺。

我懷疑您的默認文化信息使用逗號作為小數分隔符而不是點。 如果您知道您的輸入將有一個點,則最好明確指定不變文化:

double d1 = double.Parse(s1, CultureInfo.InvariantCulture);
double d2 = double.Parse(s2, CultureInfo.InvariantCulture);

但是,如果十進制值沒關系,你應該考慮使用decimal ,而不是要么floatdouble

decimal d1 = decimal.Parse(s1, CultureInfo.InvariantCulture);
decimal d2 = decimal.Parse(s2, CultureInfo.InvariantCulture);

如果您遇到格式異常,這意味着您運行代碼的文化不使用. 小數分隔符的字符。 你可以做幾件事:

  1. 將您的全球文化轉變為使用該文化的文化. 字符作為其小數分隔符
  2. 手動更換. 您的文化的小數分隔符的字符
  3. 調用接收IFormatProvider實例的各種解析方法的重載

到目前為止,我認為第三種選擇是最好的。 它允許您指定解析方法所期望的格式。 CultureInfo類實現IFormatProvider接口。 在您的代碼中,您期望得到. 字符是小數點分隔符。 在幾種文化中都是如此,但您最安全的選擇可能是InvariantCulture

您可以按如下方式修改代碼:

string s1 = "2"; 
string s2 = "25.00";

double d1 = Convert.ToDouble(s1, CultureInfo.InvariantCulture);
double d2 = Convert.ToDouble(s2, CultureInfo.InvariantCulture);
double d3 = d2 * d1;
string s1 = "2";
string s2 = "25.00";

double d1 = double.Parse(s1, CultureInfo.InvariantCulture);
double d2 = double.Parse(s2, CultureInfo.InvariantCulture);
double d3 = d2 * d1;
string s1 = "2";
string s2 = "25.00";

float f1 = float.Parse(s1, CultureInfo.InvariantCulture);
float f2 = float.Parse(s2, CultureInfo.InvariantCulture);
float f3 = f2 * f1;

這里, CultureInfo類的NumberFormat屬性用於確定將字符串解析為doublefloat時使用的小數分隔符。

我已經創建了一個.NET Fiddle來向您展示它的工作原理: https//dotnetfiddle.net/Z5HB4T

通過使用CultureInfoNumberFormat屬性的NumberDecimalSeparator屬性,您可以查看特定區域性的小數分隔符:

// Returns: "."
CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator;

// Outputs: "."
new CultureInfo("en-US").NumberFormat.NumberDecimalSeparator;

// Returns: ","
new CultureInfo("nl-NL").NumberFormat.NumberDecimalSeparator;

// Returns: "<depends on what is set as the current culture>"
CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;

請參閱以下網址https//dotnetfiddle.net/nSbYoP

有趣的是, NumberFormat屬性的類型為NumberFormatInfo ,它也實現了IFormatProvider 這意味着您還可以將NumberFormatInfo實例傳遞給解析方法。 這允許您完全根據自己的喜好創建數字格式。 然后,我們可以使用我們喜歡的任何十進制數字分隔符 以下示例將十進制數字分隔符更改為#字符:

var numberFormatInfo = new NumberFormatInfo();
numberFormatInfo.NumberDecimalSeparator = "#";

string s1 = "2"; 
string s2 = "25#00";

double d1 = Convert.ToDouble(s1, numberFormatInfo);
double d2 = Convert.ToDouble(s2, numberFormatInfo);
double d3 = d2 * d1;

請參閱: https//dotnetfiddle.net/h6ex2Z

這種方法使您可以完全自由地使用解析方法來解釋數字。

有時當您轉換為例如字符串“4.1”以使轉換加倍時,將為您提供41,為此您可以輕松修復替換“。” 用“,”ej:double ress = Convert.toDouble(“4.1”.replace(“。”,“,”);

暫無
暫無

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

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