我想將一個浮點數轉換爲它的字符串表示形式,而不會出現在科學記數法中的結果。浮動到字符串使用往返
我第一次嘗試:
ToString("0." + new string('#', 7))
但這似乎並沒有對大的值正常工作。例如:
float largeNumber = 12345678f;
string str = largeNumber.ToString("0." + new string('#', 7));
結果"12345680"
我又試圖ToString("R")
這個工程的大量之上,但如果數字過於大,它們顯示在科學記數法。例如5000000000f
結果爲"5E+09"
。和小數字如0.0005
導致0.0004999999966
我也試過混合2,但在某些情況下我仍然得到科學記數法。
我的測試程序粘貼在下面。我明白,會有精確的問題,但我想知道我能做得比我有什麼更好嗎?
class Program
{
static void Main(string[] args)
{
Write(0.123456789f);
Write(0.12345678f);
Write(0.1234567f);
Write(0.123456f);
Write(0.12345f);
Write(0.1234f);
Write(0.123f);
Write(0.12f);
Write(0.1f);
Write(1);
Write(12);
Write(123);
Write(1234);
Write(12345);
Write(123456);
Write(1234567);
Write(12345678);
Write(123456789);
Console.WriteLine();
float f = 5000000000f;
for (int i = 0; i < 17; ++i)
{
Write(f);
f /= 10;
}
Console.WriteLine();
f = 5000000000f;
for (int i = 0; i < 17; ++i)
{
Write(f < 1 ? f + 1 : f);
f /= 10;
}
Console.Read();
}
static void Write(float f)
{
//string str = f.ToString("0." + new string('#', 7));
//string str = f.ToString("R");
string str = Math.Abs(f) < 1 ? f.ToString("0." + new string('#', 7)) : f.ToString("R");
Console.WriteLine(str);
}
}
我已經提到過這個 – pastillman 2014-12-04 20:20:26