C#中如何将float类型数值转换为byte类型
报错原因
byte为无符号8位整数类型,合法取值范围是0 ~ 255。你传入的数值794.328247远大于byte类型的最大值255,因此触发溢出错误:
Value was either too large or too small for an unsigned byte.
解决方案
根据你的实际业务需求选择对应处理方式:
- 方案1:截断溢出位,仅保留低8位有效数值
对原数值取整后取模256,再转换为byte类型:double originValue = 794.328247; // 794 取模256的结果为26,最终转换结果为26 byte result = Convert.ToByte(Convert.ToInt32(originValue) % 256); - 方案2:数值钳位,超出范围时取边界值
若数值超过255统一返回255,低于0统一返回0:double originValue = 794.328247; int intValue = Convert.ToInt32(originValue); int clampedValue = Math.Clamp(intValue, byte.MinValue, byte.MaxValue); // 最终转换结果为255 byte result = Convert.ToByte(clampedValue); - 方案3:比例映射,将原数值区间归一化到byte取值区间
适合原数值有固定取值范围的场景,例如原数值范围为01000,映射到0255:double originValue = 794.328247; // 可根据实际场景修改原数值的最大、最小值 double scaledValue = originValue / 1000 * byte.MaxValue; // 最终转换结果为203 byte result = Convert.ToByte(Math.Round(scaledValue));
注意:转换前建议先根据业务规则校验原数值合法性,避免出现不符合预期的转换结果
内容的提问来源于stack exchange,提问作者Vishal.Dhure
相关产品推荐
相关产品推荐

