所有
我的设置:
我们将lat / lng存储为数据库中的十进制值(最多6位小数),这些值在域模型(加载实体)中映射为十进制值(lat / lng)
在应用程序中虽然我们使用了一个类"位置"在lat / lng上执行双格式操作(因为.net Math api在双精度中有效)
因此,当我们从十进制数据库加载lat / lng时,它会被应用程序用作double(s)。这就是问题所在! 转换双 - > dec(舍入发生)并且我知道为什么会发生这种情况因此最好的工作是什么呢?
问题示例:
在用户以组件形式(DMS)输入lat并且在转换之后将lat保存到数据库中的情况下,舍入是一个问题,保存了不同的值。当用户以组件形式加载并查看它时,它不是他最初输入的内容。
例如:
用户输入:N10-01-03.5
加载时:N10-01-03.468(由dbl - > dec转换引起)
可能的解决方案:
1)在我的"位置"中使用小数(对于lat / lng)我每次进行计算时,都会将dec / lng从dec转换为> dbl然后回到dec。
2)将lat / lng存储为数据库中的双精度(不确定将来是否会出现此问题)。我们希望精确到小数点后6位。
3)你的建议.....
答案 0 :(得分:0)
所有,我发现了问题。虽然,dbl之间有一些四舍五入 - &gt;为什么3.5秒变成3.468的原因是我的hibernate映射中没有设置精度/比例值,所以hibernate使用默认值并将值截断到小数点后5位,无论数据库中的prec / scale设置如何。< / p>
因此值'10 .0176388888889'保存为'10 .0176300000000000'。