我正在尝试使用以下方法减去C#中的百分比:
n = n - (n * 0.25);
但是我收到了一个错误:
“无法隐式'加倍'到'int'。存在显式转换 (你错过了演员?)“
答案 0 :(得分:2)
您的值n
是int
。
当您乘以0.25
(double
)时,结果值为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.25
为double
,因此结果为double
。您应该手动转换它,因为double
到int
没有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
是一个整数,因为两个操作数(n
和4
)都是整数,不会导致促销,因此使用整数除法。
<强>解释强>
这是类型提升,n
乘以double
,自动将n*0.25
提升为double
。原语只能被提升到更高的等级,而不是降级到更低的等级。如果原始x
能够保存y
的所有值而不会导致精度损失,则原始y
的排名高于另一个原始double
。 0.1
可以保存整数的所有值,但是整数可以不保持double
。所以你正试图推广和降级。有关详细信息,请参阅MSDN library。
注意:
从int
投射到-2.5
会导致值被截断,即“点”将被删除后的所有小数,因此-2
变为1.5
和{{ 1}}变为1
。如上所用,整数除法也会舍入为零,使得此赋值与您的赋值相等。但是避免任何昂贵的转换。