PHP用来处理传入的经纬度,然后做一个格式化。
传入的经纬度<?php //经度lag = 22.532987
//纬度lng = 113.93044399999997
$maplat = 22.532987; /* 精度 */
$maplng = 113.93044399999997; /* 纬度 */echo floatval($maplng); //输出  113.930444,自动忽略了末尾的几位,只保留了小数点后6位
现在要的是如何格式化这个保留小数点后这几位?
另外的我存放经纬度是用数据库MySQL的DOUBLE的double(13,10)。这样合理吗?

解决方案 »

  1.   

    number_format ( float $number [, int $decimals = 0 ] )MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。MySQL将DOUBLE视为DOUBLE PRECISION(非标准扩展)的同义词。MySQL还将REAL视为DOUBLE PRECISION(非标准扩展)的同义词,除非SQL服务器模式包括REAL_AS_FLOAT选项。为了保证最大可能的可移植性,需要使用近似数值数据值存储的代码应使用FLOAT或DOUBLE PRECISION,不规定精度或位数。DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度
      

  2.   

    php浮点数遵循IEEE754,有误差,有些数是不能用二进制小数精确表示的
    可以使用bigint,用64位php或者gmp库计算,就不会有误差了
    实际上int够了,经纬度乘以10000000取整,已经精确到厘米级别了
      

  3.   

    用number_format($num,$dem)函数,第一个参数是你的数字,第二个是你需要精确到几位小数
      

  4.   


    代码修改为:
    <?php
    //经度lag = 22.532987
    //纬度lng = 113.93044399999997
    $maplat = 22.532987; /* 精度 */
    $maplng = 113.93044399999997; /* 纬度 */printf('%.14f',$maplng); //正确输出113.93044399999997
    ?>