Kotlin 或 Java 中有没有办法将 Double 解析为 Int 并知道所有双精度数都不会超过 Int 内存限制? 例子:
双 | 国际 |
---|---|
1,123 | 1123 |
1,1 | 11 |
1,12345 | 11234 |
0,12345 | 1234 |
我知道我们可以先将其解析为字符串并删除“.”然后到 Int 但我想要一个更有效的方法。
假设您想保留所有有效数字,您应该使用 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 保留在数字末尾。
如果您知道小数部分后要保留多少位,则只需乘以 10^n 并将结果存储在 int 中即可。
双精度数与浮点数的存储方式始终是数字的近似值。正如其他人所说,这意味着 1.1 无法准确表示,实际值更接近 1.100000000000000088817841970012523233890533447265625
如果我们知道您想通过这种数据转换实现什么目标,也许我们可以提供不同的替代方案?因为这是一件非常奇怪的事情,我想不出为什么你需要在任何应用程序中这样做。