在我的c#控制台应用程序中,我希望将双精度变量转换为字符串类型。但是结果字符串变量应该至少有小数点左边的3位和小数点右边的1位。示例: 3.4569应转换为"003.4“
它对上面的例子有效,但对于后面的转换抛出错误的结果。
double Num = Math.Pow((3 + Math.Sqrt(5)), N); //6578336356630531.0 for N=22
string StringNum = Num .ToString("000.0");它的结果..
StringNum ="6578336356630530.0";但这将会是..。
StringNum ="6578336356630531.0";如何获取这些类型数字的确切字符串值??
//decimal Num=Convert.ToDecimal (Math.Pow((3 + Math.Sqrt(5)), N));
//this conversion also looses original value谢谢..。
发布于 2013-04-03 00:06:54
问题是您存储的值恰好是6578336356630531。没有更接近6578336356630530的double值。因此,对于执行时存在的数据,输出是正确的。
来自the documentation
所有浮点数的有效位数也是有限的,这也决定了浮点值近似实数的精确度。双精度值的精度最多为15位小数,但内部最多保留17位。
你在吹毛求疵地说第16位数字。
我有一个handy class,它可以让你看到任何double的确切值。
如果您需要更高的精度,请使用decimal而不是double。请注意,decimal的范围较小,但精度较高。
https://stackoverflow.com/questions/15768776
复制相似问题