减去C#中的百分比

时间:2013-01-30 11:29:25

标签: c# percentage subtraction

我正在尝试使用以下方法减去C#中的百分比:

n = n - (n * 0.25);

但是我收到了一个错误:

  

“无法隐式'加倍'到'int'。存在显式转换   (你错过了演员?)“

10 个答案:

答案 0 :(得分:2)

您的值nint

当您乘以0.25double)时,结果值为double,您尝试将其分配给int

要解决此问题,您必须指明您意识到使用“显式转换”会失去精确度。

n = n - (int)(n * 0.25);

执行(Type)value被称为“将value投射到Type”。这正是错误消息建议您做的事情。

或者,如果您不想保持精确度,请将n声明为int,而不是double。在这种情况下,您无需将n * 0.25投射到int

答案 1 :(得分:2)

如果您不想在int和double类型之间前后切换,可以使用:

n =(n * 75)/ 100

如果您的答案有小数,它们将会丢失,但

答案 2 :(得分:0)

您的变量n必须是整数,但计算结果是双精度,因为它涉及乘以双精度(0.25)。

您可以将结果强制转换为如下所示的int:

n = (int)(n - (n * 0.25));

答案 3 :(得分:0)

我假设n是一个整数类型,然后说int,因为你没有给出一个线索。在这种情况下,最简单的解决方案是:

n = Convert.ToInt32(n - (n * 0.25));

或者你可以施放:

n = (int)(n - (n * 0.25));

答案 4 :(得分:0)

检查变量'n'的类型。

要么'n'应该是双重类型。

使用显式强制转换转换为int。

int n = (int)(n - (n * 0.25));

答案 5 :(得分:0)

您的n变量是int。当您尝试使用0.25进行复用时,0.25double,因此结果为double。您应该手动转换它,因为doubleint没有Implicit Numeric Conversion。你必须使用Explicit Numeric Conversion

From --> To

double --> sbyte , byte, short, ushort, int, uint, long, ulong, char, float, or decimal

您应该将正确的表达式转换为int

int n = 100;
n = (int) (n - (n * 0.25));
Console.WriteLine(n);

这是DEMO

记住;

  • 显式数字转换可能会导致精度下降。
  • 当您从double值转换为整数类型时,该值将被截断。如果生成的整数值超出目标值的范围,则结果取决于溢出检查上下文。

答案 6 :(得分:0)

您必须将结果转换为int

n=(int)(n-(n*0.25));

答案 7 :(得分:0)

尝试:

n = n - (int)((double)n * 0.25);

注意:通过这样做,你不会在n结果中的数字后面有数字。

答案 8 :(得分:0)

我想这可能是一个问题,n的类型为int,最不需要double

因此当你有n = n - (n * 0.25)时,结果是双重

如果你想把它转换成int然后小心四舍五入,因为它不会总是以.00

结尾

我认为这会更好n = n * 0.75

答案 9 :(得分:0)

最好的方法是做

 n = n - n/4;

如果您希望百分比为0到100之间的整数,则应将n替换为double,并将int n替换为double n。 建议的任务不会发生代价高昂的转换。请注意,n/4是一个整数,因为两个操作数(n4)都是整数,不会导致促销,因此使用整数除法。

<强>解释

这是类型提升,n乘以double,自动将n*0.25提升为double。原语只能被提升到更高的等级,而不是降级到更低的等级。如果原始x能够保存y的所有值而不会导致精度损失,则原始y的排名高于另一个原始double0.1可以保存整数的所有值,但是整数可以不保持double。所以你正试图推广和降级。有关详细信息,请参阅MSDN library

注意: 从int投射到-2.5会导致值被截断,即“点”将被删除后的所有小数,因此-2变为1.5和{{ 1}}变为1。如上所用,整数除法也会舍入为零,使得此赋值与您的赋值相等。但是避免任何昂贵的转换。