2012-08-29 58 views
0

目前我正在嘗試匹配C#和C++應用程序。在C++的一面,當有一個值,說:如何「添加」有效數字從浮點值翻倍

const char* svalue = "554.1327"; 

當我使用sscanf

float x; 
sscanf(svalue, "%f", &x); 

x將等同於554.13269,即它有 「額外的」 顯著的數字,即使他們可能會達到相同的值。 (我認爲這個應用程序使用不同的float類型,可以容納超過7位有效數字。)

我不想更改C++端。我希望我的單獨C#應用程序也這樣做。

例如,如果我有浮子23423.29,我想將其轉換爲23423.289,這是一個double(因爲在C#,標準float具有不超過7個顯著數字),然後再轉換double成一個字符串。

我似乎無法找到一種方法來做到這一點。有任何想法嗎?或者我必須創建自己的函數或從C#端調用相同的C++函數......?

回答

0

您好是你的問題像

  Double d = 23423.29f; 
     int a = 23423.29.ToString().Length; 
     Console.WriteLine(d.ToString().Remove(++a)); 

一個temprary解決方案,使結果

23423.289 
0

「如果我有浮動23423.29 […]」

請注意,在C#中,文字23423.29有型號doublefloat文字後綴爲f,例如23423.29f

float f = float.Parse("23423.29"); // results in f == 23423.29f 
double d = (double)f;    // results in d == 23423.2890625 

this answer的問題,Convert float to double without losing precision,用於解釋爲什麼這些額外的數字顯示:

話雖這麼說,額外的數字從float轉換時double也出現在.NET。

當您轉換回字符串,可以控制通過numeric format string

string s = d.Format("F3");   // will include 3 digits after the decimal point 
的數字數,例如: