Double 到 Int,动态删除精度点

问题描述 投票:0回答:2

Kotlin 或 Java 中有没有办法将 Double 解析为 Int 并知道所有双精度数都不会超过 Int 内存限制? 例子:

国际
1,123 1123
1,1 11
1,12345 11234
0,12345 1234

我知道我们可以先将其解析为字符串并删除“.”然后到 Int 但我想要一个更有效的方法。

java kotlin double precision
2个回答
0
投票

假设您想保留所有有效数字,您应该使用 BigDecimal 进行转换和变换而不会丢失信息:

import java.math.BigDecimal;

public class MyClass {
    public static void main(String args[]) {
      BigDecimal x=BigDecimal.valueOf(1.12345);
      int y=x.unscaledValue().intValueExact();
      System.out.println("y = " + y);
    }
}

输出:

y = 112345
需要

valueOf()
从浮点类型创建 BigDecimal 而不会出现表示错误。如果结果超出
intValueExact()
的范围,
int
将引发异常。

请注意,与您的示例不同,此解决方案将 5 保留在数字末尾。


0
投票

如果您知道小数部分后要保留多少位,则只需乘以 10^n 并将结果存储在 int 中即可。

双精度数与浮点数的存储方式始终是数字的近似值。正如其他人所说,这意味着 1.1 无法准确表示,实际值更接近 1.100000000000000088817841970012523233890533447265625

如果我们知道您想通过这种数据转换实现什么目标,也许我们可以提供不同的替代方案?因为这是一件非常奇怪的事情,我想不出为什么你需要在任何应用程序中这样做。

© www.soinside.com 2019 - 2024. All rights reserved.