C# 如何解决双模问题以获得;0“;在c中#
在s的情况下,我发现模为2.0%0.1,这是双变量返回“0.09999”而不是“0”的结果 我的代码是:C# 如何解决双模问题以获得;0“;在c中#,c#,.net,casting,double,modulo,C#,.net,Casting,Double,Modulo,在s的情况下,我发现模为2.0%0.1,这是双变量返回“0.09999”而不是“0”的结果 我的代码是: var distanceFactor = slider.Value % step; //This do not return 0 when Value=2.0 and step=0.1 if (distanceFactor != 0) { slider.Value -= distanceFactor; } elseif(dist
var distanceFactor = slider.Value % step; //This do not return 0 when Value=2.0 and step=0.1
if (distanceFactor != 0)
{
slider.Value -= distanceFactor;
}
elseif(distanceFactor == 0)
{
//do something here
}
txtblUnits.Text = Math.Round(slider.Value, 1).ToString();
当值=2.0,步长=0.1时,如何在
elseif
条件下获得控制?模%
对浮点数没有意义。在应用运算符之前,应该将其相乘并强制转换为int
var distanceFactor = ((int) (slider.Value * 10D)) % (int) (step * 10D);
模
%
对浮点数没有意义。在应用运算符之前,应该将其相乘并强制转换为int
var distanceFactor = ((int) (slider.Value * 10D)) % (int) (step * 10D);
在if条件下,可以将距离因子四舍五入为0小数,如下所示
if (Math.Round(distanceFactor,0) != 0)
{
slider.Value -= distanceFactor;
}
else
{
//do something here
}
在if条件下,可以将距离因子四舍五入为0小数,如下所示
if (Math.Round(distanceFactor,0) != 0)
{
slider.Value -= distanceFactor;
}
else
{
//do something here
}
Double
不适用于模运算符,因此使用带浮点数的模从来都不是一个好主意,因此最好使用decimal
decimal slider = 2.0M, step = 0.1M;
var distanceFactor = slider % step; //This will return 0 when Value=2.0 and step=0.1
if (distanceFactor != 0)
{
slider -= distanceFactor;
}
else if (distanceFactor == 0)
{
//do something here
}
txtblUnits.Text = Math.Round(slider, 1).ToString();
txtblUnits.Text
将具有2.0Double
不适用于模数运算符,因此将模数与浮点数一起使用从来都不是一个好主意,因此最好使用十进制
decimal slider = 2.0M, step = 0.1M;
var distanceFactor = slider % step; //This will return 0 when Value=2.0 and step=0.1
if (distanceFactor != 0)
{
slider -= distanceFactor;
}
else if (distanceFactor == 0)
{
//do something here
}
txtblUnits.Text = Math.Round(slider, 1).ToString();
txtblUnits.Text
将具有2.0
正如我在您的帖子中评论的那样,为了正确使用模运算符,请尝试执行以下操作:
string valueDecimalsString = (slider.Value - Math.Floor(slider.Value)).ToString();
int valueDecimals = valueDecimalsString.Substring(valueDecimalsString.IndexOf('.') + 1).Length;
//The same with step
int decimals = (valueDecimals > stepDecimals) ? valueDecimals : stepDecimals;
int value = (int)(slider.Value * Math.Pow(10, decimals))
//the same with step
var distanceFactor = value % stepValue;
正如我在您的帖子中所评论的,为了正确使用模运算符,请尝试执行以下操作:
string valueDecimalsString = (slider.Value - Math.Floor(slider.Value)).ToString();
int valueDecimals = valueDecimalsString.Substring(valueDecimalsString.IndexOf('.') + 1).Length;
//The same with step
int decimals = (valueDecimals > stepDecimals) ? valueDecimals : stepDecimals;
int value = (int)(slider.Value * Math.Pow(10, decimals))
//the same with step
var distanceFactor = value % stepValue;
您可以检查距离因子步长是否小于预定义的ε值。顺便说一下,双精度模不是一个好主意……模不应该与非整数值一起使用,因为在数学中,它是一个整数运算符。你试着做mod(2,0.1),这和做mod(20,1)是一样的。看看提供的“重复问题”链接,有一个关于模运算符发生什么的等式。。。就这么做吧:<代码>双a、b、r;a=120;b=.05;r=a-数学楼层(a/b)*b代码>您可以检查距离因子步长是否小于预定义的ε值。顺便说一下,双精度模不是一个好主意……模不应该与非整数值一起使用,因为在数学中,它是一个整数运算符。你试着做mod(2,0.1),这和做mod(20,1)是一样的。看看提供的“重复问题”链接,有一个关于模运算符发生什么的等式。。。就这么做吧:<代码>双a、b、r;a=120;b=.05;r=a-数学楼层(a/b)*b你能用语言解释一下你的逻辑吗?Thanskj(当然:)作为模和整数运算符,我们在这里要做的是只使用整数得到相同的除法。我们将每个数字乘以10的n次方,n是这些数字中小数的最大值。你能用语言解释一下你的逻辑吗?Thanskj(当然:)作为模和整数运算符,我们在这里要做的是只使用整数得到相同的除法。我们将每个数字乘以10的n次方,n是这些数字中小数的最大值。。。如果elseifoh是对的,我改变了密码。谢谢。什么是distancefactor=0.9999?从逻辑上讲,它会转到else parti无法执行此操作,因为此滑块。值是通过移动滑块获得的,它是双精度的,如果我将其设置为十进制,那么它将避免打印在textblock上的滑块程序树的小阻力。现在,如果条件为真。。。如果elseifoh是对的,我改变了密码。谢谢。什么是distancefactor=0.9999?从逻辑上讲,它会转到else parti无法执行此操作,因为此滑块。值是通过移动滑块获得的,它是双精度的,如果我将其设置为十进制,那么它将避免打印在textblock.slider id uielement上的滑块程序树的小阻力,因此其值始终是双精度的。我们不是手动赋值,它是通过拖动滑块获得的。然后简单地将其转换为十进制,即decimal slider=(decimal)slider.Value代码>我不能这样做,因为这个slider.Value是通过移动slider获得的,它是双精度的,如果我将它设为十进制,那么它将避免打印在textblock.slider id ui元素上的slider progree的小阻力,所以它的值总是双精度的。我们不是手动赋值,它是通过拖动滑块获得的。然后简单地将其转换为十进制,即decimal slider=(decimal)slider.Value代码>我不能这样做,因为这个滑块。值是通过移动滑块获得的,它是双精度的,如果我将其设置为十进制,那么它将避免打印在textblock上的滑块程序的小阻力。我不能这样做,因为这个滑块。值是通过移动滑块获得的,它是双精度的,如果我将其设置为十进制,那么它将避免小阻力拖动打印在textblock上的slider progree。我不能这样做,因为此slider.Value是通过移动滑块获得的,它是双精度的,如果我将其设置为十进制,则将避免打印在textblock上的slider progree的小拖动。