C#如何将double数组转换为float数组或int数组
Java double数组转float/int数组实现方案
转float数组
double转float属于窄化基础类型转换,会损失精度,仅适用于对精度要求不高、且确认数值在float取值范围内的场景。
注意:Java原生Stream未提供float类型的基本类型流实现,直接通过流操作只能得到
Float[]引用类型数组,如需float[]基本类型数组,优先使用遍历写法。
通用遍历写法(支持所有Java版本):
double[] values= new double[]{123.456,234.123}; float[] floatValues = new float[values.length]; for (int i = 0; i < values.length; i++) { floatValues[i] = (float) values[i]; }
转int数组
double转int有两种常用转换策略,可根据业务需求选择:
1. 截断小数位(直接强转)
直接丢弃小数部分,仅保留整数位,例如123.999转换后为123:
- 通用遍历写法
double[] values= new double[]{123.456,234.123}; int[] intValues = new int[values.length]; for (int i = 0; i < values.length; i++) { intValues[i] = (int) values[i]; }
- Java 8+ 流写法
import java.util.Arrays; int[] intValues = Arrays.stream(values).mapToInt(v -> (int) v).toArray();
2. 四舍五入取整
通过Math.round()方法做四舍五入后取整,例如123.6转换后为124,123.4转换后为123:
- 通用遍历写法
double[] values= new double[]{123.456,234.123}; int[] intValues = new int[values.length]; for (int i = 0; i < values.length; i++) { // Math.round接收double参数时返回long类型,需强转为int intValues[i] = (int) Math.round(values[i]); }
- Java 8+ 流写法
import java.util.Arrays; int[] intValues = Arrays.stream(values).mapToInt(v -> (int) Math.round(v)).toArray();
注意事项
- 转换前建议做非空校验,避免空指针异常
- 窄化转换存在溢出风险:如果double值超出目标类型的取值范围,转换后会得到错误值,建议使用前先做范围校验:
- float取值范围:约 ±3.4028235E38
- int取值范围:-2147483648 ~ 2147483647
内容的提问来源于stack exchange,提问作者djc
相关产品推荐
相关产品推荐

