public partial class Form1 : Form { public Form1() { InitializeComponent(); double D = 0.000000247976284839523942; MessageBox.Show(D.ToString("0.000000000000000000000000")); // 结果: 0.000000247976284839524000 最后几位舍入是由于你这个数超过双精度数最大能表示的精度了,所以它就用科学计数法来表示了 // 如果你想处理高精度数据,估计要自己写代码处理了,我好像以前看到过有用2个double来组合运算超高精度的数
} String GetString(double D) { String Result = String .Empty ; double Temp = Math.Truncate(D); while (Temp > 0) { Result = (Temp % 10).ToString() + Result; Temp=Math.Truncate(Temp/10); } Temp = D - Math.Truncate(D); while (Temp - Math.Truncate(Temp) > 0) { Temp *= 10; Result += Math.Truncate(Temp); Temp -= Math.Truncate(Temp); } return Result; } }
更正一下 下面那个GetString 没用的,是我用来测试的,测试发现整数部分没问题,但小数部分 Temp = D - Math.Truncate(D); 会发生误差,最后会多出来很多位
double d=0.00000024797628483952394 ;
string a=d.ToString(); //得到的结果为"2.47976284839524E-07"
我想为a="0.00000024797628483952394" 而不是科技计数法表示的结果
漏掉了 0.double d=0.00000024797628483952394 ;
string a=d.ToString(); //得到的结果为"2.47976284839524E-07"
我想为a="0.00000024797628483952394" 而不是科技计数法表示的结果
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
double D = 0.000000247976284839523942;
MessageBox.Show(D.ToString("0.000000000000000000000000"));
// 结果: 0.000000247976284839524000 最后几位舍入是由于你这个数超过双精度数最大能表示的精度了,所以它就用科学计数法来表示了
// 如果你想处理高精度数据,估计要自己写代码处理了,我好像以前看到过有用2个double来组合运算超高精度的数
} String GetString(double D)
{
String Result = String .Empty ;
double Temp = Math.Truncate(D);
while (Temp > 0)
{
Result = (Temp % 10).ToString() + Result;
Temp=Math.Truncate(Temp/10);
}
Temp = D - Math.Truncate(D);
while (Temp - Math.Truncate(Temp) > 0)
{
Temp *= 10;
Result += Math.Truncate(Temp);
Temp -= Math.Truncate(Temp);
}
return Result;
}
}
下面那个GetString 没用的,是我用来测试的,测试发现整数部分没问题,但小数部分 Temp = D - Math.Truncate(D);
会发生误差,最后会多出来很多位