C# 将浮点转换为自定义定点数据类型
我有一个固定点数据类型:C# 将浮点转换为自定义定点数据类型,c#,numbers,bit-manipulation,C#,Numbers,Bit Manipulation,我有一个固定点数据类型: public struct Fixed { public const long SCALE = 1_000_000_000; private readonly long unscaledValue; public static explicit Fixed(double value) { // Halp } public static explicit double(Fixed value) {
public struct Fixed
{
public const long SCALE = 1_000_000_000;
private readonly long unscaledValue;
public static explicit Fixed(double value)
{
// Halp
}
public static explicit double(Fixed value)
{
// Halp
}
}
因此,代表5.2,unscaledValue
将是5200000。将
float
s和double
s转换为my数据类型的最佳方法是什么,反之亦然 你可以这样做
long fix = (long) value * scale;
double value = ((double) fix)/((double)scale);
用于转换为您的类型以及类似的内容
long fix = (long) value * scale;
double value = ((double) fix)/((double)scale);
用于重新转换
但是要注意精度的损失,如果你想乘以你的类型的两个数字,你需要重新缩放操作符或者结果
e、 g
是否必须是基于十进制的定点数据类型?是。我需要数字的精确表示,如0.1、0.01…为什么要在
十进制上使用此值呢?但是既然0.1
不能精确表示为双精度
,我看不到正确转换它的机会。decimal
不是一个选项吗?复制decimal的源代码。当我将价值观设定为long时,我将所有信息都从dacimal点释放出来。此外,将修正值转换为双精度可能会导致溢出。