我的纬度和经度是双倍的,我想用dot转换为字符串格式。所以我正在使用:
start_lon.ToString(CultureInfo.InvariantCulture)
我得到正确的格式(我得到点)但我发现有时候我错过了一些最后的数字。为什么会这样?例如,我得到了号码16.597571661711296,我得到这个字符串“16.5975716617113”。我知道这是“四舍五入”(不确定这是英语中的正确单词)数字,但为什么?我该如何解决这个问题?
答案 0 :(得分:1)
double
的精度为15-16位。
这就是为什么它正在向这个数字四舍五入。
这里有更多信息 http://msdn.microsoft.com/en-us/library/678hzkk9(v=vs.71).aspx
答案 1 :(得分:1)
数字格式包含多个十进制数字,因此您应该更改它以确保您将获得所需的结果。
var nfi = (System.Globalization.NumberFormatInfo)System.Globalization.CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberDecimalDigits = xxx;
start_lon.ToString(nfi);
答案 2 :(得分:1)
对于将来的读者请注意,可以使用往返格式说明符始终获取最合适的数字:
默认情况下,尽管内部最多保留17位数字,但返回值仅包含15位数字的精度。如果此实例的值大于15位,则ToString返回PositiveInfinitySymbol或NegativeInfinitySymbol而不是预期的数字。如果需要更高的精度,请使用“ G17”格式规范指定格式,该格式规范始终返回17位精度,如果使用该精度表示数字,则始终返回“ 15”,如果仅数字精度则返回17位。以最高的精度表示。
string valueString = initialValue.ToString("R", CultureInfo.InvariantCulture);
这适用于双打以及浮动/单打。
答案 3 :(得分:0)
我该如何解决这个问题?
使用decimal
类型而不是double
decimal n = 16.597571661711296M;
// This writes: 16.597571661711296
Console.WriteLine(n.ToString("G", CultureInfo.InvariantCulture));