我正在尝试使用以下方法减去 C# 中的百分比:
n = n - (n * 0.25);
但我收到一个错误:
“不能隐式地'加倍'到'int'。存在显式转换(您是否缺少演员表?)”
我正在尝试使用以下方法减去 C# 中的百分比:
n = n - (n * 0.25);
但我收到一个错误:
“不能隐式地'加倍'到'int'。存在显式转换(您是否缺少演员表?)”
你的价值n
是一个int
。
当您乘以0.25
( 这是 a double
) 时,结果值是double
您尝试分配给 a 的 a int
。
要解决它,您必须指定您知道使用“显式转换”会丢失精度。
n = n - (int)(n * 0.25);
做(Type)value
被称为“投到value
” Type
。这正是错误消息建议您执行的操作。
或者,如果您不想保持精度,请不要声明n
为 anint
而是声明为double
. 在这种情况下,您不必强制n * 0.25
转换为int
.
如果您不想在 int 和 double 类型之间来回切换,您可以使用:
n = (n * 75) / 100
如果您的答案曾经有小数,但它们会丢失
我想这可能是 n 类型的问题,因为int
它最不需要是double
因此,当您得到n = n - (n * 0.25)
结果时,结果是双倍的
如果您想将其转换为 int 则请注意舍入,因为它并不总是以.00
我也认为这会更好n = n * 0.75
您的变量n
必须是整数,但您的计算结果是双精度数,因为它涉及乘以双精度数 ( 0.25
)。
您可以将结果转换回 int,如下所示:
n = (int)(n - (n * 0.25));
我假设那n
是一个整数类型,比如说int
,因为你没有给出任何线索。在这种情况下,最简单的解决方案是:
n = Convert.ToInt32(n - (n * 0.25));
或者你可以投射:
n = (int)(n - (n * 0.25));
检查变量“n”的类型。
'n' 应该是双精度类型。
或者
使用显式强制转换转换为 int。
int n = (int)(n - (n * 0.25));
你的n
变量是一个int
. 当您尝试使用多个 with 时0.25
,0.25
是double
,所以结果将是double
。您应该手动转换它,因为没有Implicit Numeric Conversion
for double
to int
。你必须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
值转换为整数类型时,该值将被截断。如果生成的整数值超出目标值的范围,则结果取决于溢出检查上下文。您必须将结果转换为 int
n=(int)(n-(n*0.25));
最好的方法是做
n = n - n/4;
如果您希望百分比是 0 到 100 之间的整数,否则您应该通过替换为n
a来声明。建议的分配不会发生代价高昂的转换。请注意,它是一个整数,因为两个操作数 (和) 都是整数,不会导致提升,因此使用整数除法。double
int n
double n
n/4
n
4
解释
这是类型提升,n
乘以 a double
,n*0.25
自动提升为 a double
。原始人只能升职,不能降职。如果一个原语可以保存所有的值而不会导致精度损失,则它x
的等级高于另一个原语。A可以保存整数的所有值,但例如,整数可以不保存。所以你正在努力提升和降级。有关详细信息,请参阅MSDN 库。y
y
double
0.1
注意:从 adouble
转换为 anint
会导致值被截断,即“点”之后的所有小数都将被删除,因此-2.5
变为-2
和1.5
变为1
。上面使用的整数除法也四舍五入为零,使此分配与您的分配相等。但避免任何昂贵的转换。
尝试:
n = n - (int)((double)n * 0.25);
注意:通过这样做,您不会在 n 结果中的点后面有数字。