【问题标题】:How to round off longitude and latitude values [duplicate]如何舍入经度和纬度值[重复]
【发布时间】:2016-03-17 22:34:47
【问题描述】:

如何将这些经度和纬度值四舍五入到小数点后 6 位?

p1 包含经度和纬度值,“latValue”和“longValue”分别包含它们各自的值。

p1 = new LatLng((float) (location.getLatitude()),
                    (float) (location.getLongitude()));

float latValue = (float) p1.latitude;
float longValue = (float) p1.longitude;

【问题讨论】:

    标签: java android rounding


    【解决方案1】:

    由于浮点值(即 float 和 double)表示为二进制分数而不是十进制分数,因此实际上没有任何方法可以将值四舍五入到存储值中的任何给定精度。

    使用String.format("%.6f", p1.latitude)打印值时可以这样做

    可以说,您可以使用类似以下的内容,但它会立即返回浮点数,因此再次变得不精确:

    round(latValue * 1000000.0) / 1000000.0
    

    【讨论】:

    • 如果我把它做成双精度而不是浮点数呢?
    • double 也是浮点数,因此本质上没有十进制精度。像“0.1”这样简单的数字不能用任何大小的浮点数精确表示。
    • 基本上,问题归结为您可以打印/显示/转换为具有任何给定精度的字符串,但固有精度不会改变。
    【解决方案2】:

    使用十进制格式

    示例:

    float myFloat = 3.123123123f;
    DecimalFormat df = new DecimalFormat("#.######");
    df.setRoundingMode(RoundingMode.CEILING);
    
    System.out.println(df.format(myFloat));
    

    在你的情况下

    System.out.println(df.format(latValue));
    System.out.println(df.format(lonValue));
    

    【讨论】:

    • 请注意,这只是以 6 位小数的分辨率显示不精确的浮点数,实际上并不影响精度。
    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2016-09-30
    • 1970-01-01
    相关资源
    最近更新 更多