我正在使用Google Maps Api v3,但此问题与Grails默认格式有关。在我的域类中,我有:
Float latitude;
Float longitude;
Google地图的正确坐标为:
36.5270612, -6.288596200000029
不幸的是,在节目中,它会显示:
365.270.624, -6.288.596.088.651.776
- 显示代码:
<p id="latitude"><g:fieldValue bean="${bestInstance}" field="latitude"/></p>
不幸的是,编辑也不是很好。它显示:
3.65270624E8, -6.2885961E15
here的以下解决方案因为3.65270624 E8 格式而让我感到害怕:
${bestInstance.latitude.encodeAsHTML()}
我看了here,我们应该舍入到。以下代码应该可以使用:
DecimalFormat decimalFormat = new DecimalFormat("0.000000");
decimalFormat.setRoundingMode(java.math.RoundingMode.DOWN);
来自documentation I found out: formatNumber。我尝试了以下代码(但结果与节目相同):
<g:formatNumber format="0.000000" number="${bestInstance.latitude}" type="number" />
我们如何在GSP文件中执行相同的操作?
答案 0 :(得分:0)
我从params传递纬度和经度,我正在使用它们如下所示:
[ ${params.float('celat', defLat)}, ${params.float('celng', defLong)}]
其中 defLat 和 defLong 是默认值,这很有用
答案 1 :(得分:0)
问题通常是输入是一个字符串。如果值是数字或字符串,我们必须特别仔细检查。我的解决方案:
1)在保存它们之前降低共聚物的精度(如果没有,会发生奇怪的事情!):
def create()
(...)
case 'POST':
(...)
params.putAt('latitude', reducePrecision(params.latitude))
params.putAt('longitude', reducePrecision(params.longitude))
(...)
private def reducePrecision(coordenate) {
coordenate= Float.parseFloat(coordenate);
return ( (float) ( (int) coordenate* 100000 ) / 100000 );
}
2)在show.gsp中,获取值(两种方式对我有用):
<div id="latitude">${alojamientoInstance.latitude}</div>
<div id="longitude">${alojamientoInstance.longitude.encodeAsHTML()}</div>