C# C执行计算时丢失十进制分辨率

C# C执行计算时丢失十进制分辨率,c#,C#,当我执行下面的计算时,我似乎失去了十进制分辨率。似乎无论我计算什么数字,我最后总是得到一些四分之一,比如十进制中的x.00,x.25,x.50,0r x.75。谢谢你的帮助。我知道mph.ToString 2会将其压缩到2位小数,但为什么要压缩到四分之一 int totalRotations=0; int lastRotations=0; int衍射=0; 整数=0; 双英里每小时=0; 双倍距离=0; 私人空房 { UInt16 val=计数器输入读取器.ReadScanUInt16; tot

当我执行下面的计算时,我似乎失去了十进制分辨率。似乎无论我计算什么数字,我最后总是得到一些四分之一,比如十进制中的x.00,x.25,x.50,0r x.75。谢谢你的帮助。我知道mph.ToString 2会将其压缩到2位小数,但为什么要压缩到四分之一

int totalRotations=0; int lastRotations=0; int衍射=0; 整数=0; 双英里每小时=0; 双倍距离=0; 私人空房 { UInt16 val=计数器输入读取器.ReadScanUInt16; totalRotations=val; 衍射=总旋转-最后旋转; 小时数=衍射*3600; 距离=小时数*1.8333333;//车轮常数,英尺/脉冲。根据车轮直径变化。 英里/小时=距离/5280; StatusBox1.Text=StatusBox1.Text+System.Environment.NewLine+负载阵列转子转速:+mphWind+:+scan.Length; sensorScans.AddSettings1.Default.Ch1c,英里/小时; //为什么我们会丢失小数点的分辨率,而仅限于0.00、0.25、0.50、0.75四分之一? lblSpeedValue.Text=mph.tostring2+mph; lastRotations=totalRotations;//保存每脉冲的最后一次旋转,以进行mph计算。 }
因为你的计算依赖于一个整数,所以旋转。最小增量是1的衍射

1×3600×1.8333333/5280=1.25


因此,每个英里/小时读数始终是1.25的倍数,例如1.25、2.50、3.75等。

因为您的计算取决于一个整数,即旋转。最小增量是1的衍射

1×3600×1.8333333/5280=1.25


因此,每个英里/小时读数始终是1.25的倍数,例如1.25、2.50、3.75等。

距离/5280除以整数?5280.0尝试使用十进制而不是双精度。将M后缀添加到数字,使其成为十进制类型。例:衍射*3600m;对于这种计算,double比decimal好。您的公式…*3600*1.8333333/5280=~1.25,所以无论衍射的整数是多少,都会得到四分之一的结果。距离是双精度的,所以将其除以整数将返回双精度。这不是问题。距离/5280除以整数?5280.0尝试使用十进制而不是双精度。将M后缀添加到数字,使其成为十进制类型。例:衍射*3600m;对于这种计算,double比decimal好。您的公式…*3600*1.8333333/5280=~1.25,所以无论衍射的整数是多少,都会得到四分之一的结果。距离是双精度的,所以将其除以整数将返回双精度。这不是问题。啊,就像Aleksandar Toplek在上面的评论一样,你们说这是一个数学问题而不是编程问题。。。我的数学从来没有那么好。哈哈,谢谢你的关注。是的,这是你的数学怪癖,代码没有任何问题。对不起,要归功于Aleksandar。当我开始回答时,我还没有注意到那个评论!谢谢大家的快速评论和回答。啊,就像上面Aleksandar Toplek的评论一样,你们说这是一个数学问题,而不是编程问题。。。我的数学从来没有那么好。哈哈,谢谢你的关注。是的,这是你的数学怪癖,代码没有任何问题。对不起,要归功于Aleksandar。当我开始回答时,我还没有注意到那个评论!感谢大家的快速评论和回答。