Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将双精度转换为字符串剪切一些最后的数字_C#_String_Double_Type Conversion_Rounding - Fatal编程技术网

C#将双精度转换为字符串剪切一些最后的数字

C#将双精度转换为字符串剪切一些最后的数字,c#,string,double,type-conversion,rounding,C#,String,Double,Type Conversion,Rounding,我有双精度的纬度和经度,我想把它们转换成带点的字符串格式。因此,我使用: start_lon.ToString(CultureInfo.InvariantCulture) 我得到了正确的格式(我得到了点),但我发现有时我遗漏了最后的一些数字。为什么会这样?例如,我得到了数字16.597571661711296,我得到了字符串“16.5975716617113”。我知道这个数字是“四舍五入”(不确定是否是正确的英语单词),但为什么?我如何解决这个问题?double的精度为15-16位。 这就是为

我有双精度的纬度和经度,我想把它们转换成带点的字符串格式。因此,我使用:

start_lon.ToString(CultureInfo.InvariantCulture)

我得到了正确的格式(我得到了点),但我发现有时我遗漏了最后的一些数字。为什么会这样?例如,我得到了数字16.597571661711296,我得到了字符串“16.5975716617113”。我知道这个数字是“四舍五入”(不确定是否是正确的英语单词),但为什么?我如何解决这个问题?

double
的精度为15-16位。 这就是为什么它四舍五入到那个数字

更多信息请点击这里
double
的精度为15-16位。 这就是为什么它四舍五入到那个数字

更多信息请点击这里

数字格式包含一个十进制数字,因此您应该更改它以确保获得所需的结果

var nfi = (System.Globalization.NumberFormatInfo)System.Globalization.CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberDecimalDigits = xxx;

start_lon.ToString(nfi);

数字格式包含一个十进制数字,因此您应该更改它以确保获得所需的结果

var nfi = (System.Globalization.NumberFormatInfo)System.Globalization.CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberDecimalDigits = xxx;

start_lon.ToString(nfi);
我怎样才能解决这个问题

使用
decimal
类型而不是
double

decimal n = 16.597571661711296M;
// This writes: 16.597571661711296
Console.WriteLine(n.ToString("G", CultureInfo.InvariantCulture)); 
我怎样才能解决这个问题

使用
decimal
类型而不是
double

decimal n = 16.597571661711296M;
// This writes: 16.597571661711296
Console.WriteLine(n.ToString("G", CultureInfo.InvariantCulture)); 

注意:对于将来的读者,您可以使用往返格式说明符始终获取最合适的数字:

默认情况下,返回值仅包含15位精度,但内部最多保留17位精度。如果此实例的值大于15位,则ToString将返回正数infinitySymbol或负数infinitySymbol,而不是预期的数字。如果需要更高的精度,请使用“G17”格式规范指定格式,该格式规范始终返回17位精度,或使用“R”格式规范,如果数字可以用该精度表示,则返回15位;如果数字只能用最大精度表示,则返回17位


这适用于双精度以及浮点数/单精度。

注意:对于未来的读者,您可以使用往返格式说明符始终获取最合适的数字:

默认情况下,返回值仅包含15位精度,但内部最多保留17位精度。如果此实例的值大于15位,则ToString将返回正数infinitySymbol或负数infinitySymbol,而不是预期的数字。如果需要更高的精度,请使用“G17”格式规范指定格式,该格式规范始终返回17位精度,或使用“R”格式规范,如果数字可以用该精度表示,则返回15位;如果数字只能用最大精度表示,则返回17位

这适用于双打和浮动/单打