我正在尝试使用以下方法减去 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 Conversionfor doubleto 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 之间的整数,否则您应该通过替换为na来声明。建议的分配不会发生代价高昂的转换。请注意,它是一个整数,因为两个操作数 (和) 都是整数,不会导致提升,因此使用整数除法。doubleint ndouble nn/4n4
解释
这是类型提升,n乘以 a double,n*0.25自动提升为 a double。原始人只能升职,不能降职。如果一个原语可以保存所有的值而不会导致精度损失,则它x的等级高于另一个原语。A可以保存整数的所有值,但例如,整数可以不保存。所以你正在努力提升和降级。有关详细信息,请参阅MSDN 库。yydouble0.1
注意:从 adouble转换为 anint会导致值被截断,即“点”之后的所有小数都将被删除,因此-2.5变为-2和1.5变为1。上面使用的整数除法也四舍五入为零,使此分配与您的分配相等。但避免任何昂贵的转换。
尝试:
n = n - (int)((double)n * 0.25);
注意:通过这样做,您不会在 n 结果中的点后面有数字。