結果が科学表記法に表示されることなく、フロートを文字列表現に変換しようとしています。
私が最初に試した:
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);
}
}