-2

我正在使用 Google Maps Api v3,但这个问题与 Grails 默认格式有关。在我的域类中,我有:

Float latitude;
Float longitude;

谷歌地图的正确坐标是:

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

由于 3.65270624 E8格式,这里的以下解决方案让我害怕:

${bestInstance.latitude.encodeAsHTML()}

我读到这里,说要四舍五入。以下代码应该可以工作

DecimalFormat decimalFormat = new DecimalFormat("0.000000");
decimalFormat.setRoundingMode(java.math.RoundingMode.DOWN);

文档中我发现: formatNumber。我尝试了以下代码(但结果与显示相同):

<g:formatNumber format="0.000000" number="${bestInstance.latitude}" type="number" />

我们如何在 GSP 文件中做同样的事情?

4

2 回答 2

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>
于 2013-09-11T01:25:37.433 回答
0

我从参数传递纬度和对数,我正在使用它们,如下所示:

[ ${params.float('celat', defLat)}, ${params.float('celng', defLong)}]

其中defLatdefLong是一些默认值,这很好用

于 2013-09-10T20:32:12.790 回答