提问人:zellidev0 提问时间:9/14/2021 最后编辑:zellidev0 更新时间:9/29/2021 访问量:207
将双精度的连续范围转换为离散的整数范围
Convert a continuous range of doubles to a discrete int range
问:
我想将双精度值 [10.0,20.0] 的连续范围映射到 [100,200] 范围内的字节;
必须满足以下条件(即使多次来回转换):
convertToByte(convertToDouble(y)) == y
谢谢。
答:
0赞
zellidev0
9/15/2021
#1
借助对问题的评论,我们使用以下代码:
int convertToByte(
double initial,
double minValue,
double maxValue,
int minByte,
int maxByte,
) {
double value = initial - minValue;
double valueRange = maxValue - minValue;
int byteRange = maxByte - minByte;
double valueSteps = valueRange / byteRange;
double byte = (value / valueSteps);
return (minByte + byte.round()).clamp(minByte, maxByte);
}
这不会为指定的测试提供解决方案,而是为特定值提供确定性答案。 当将字节转换回值时,反之亦然,多次输出始终保持不变。 这就是我们的应用程序所需要的。
评论
1赞
Eric Postpischil
9/15/2021
您应该更新问题以说明条件:convertToByte(convertToDouble(y)) = y 是必需的,但问题中显示的测试用例不是必需的。
上一个:将浮点数与乘以 2 的准确性
评论
double
convertToByte(double n) => (n * 10).round();
6/95
convertToByte(double x) { var r = d - c; return c + (r * x - r * a)/(b-a).round(); }
d-c
r