如何乘双倍乘

And*_*ker 2 c# double rounding multiplication long-integer

很抱歉问这样一个初学者的问题,但我无法弄清楚这一点.

我有一个长整数,我想要除以1.28然后向上或向下舍入到最接近的整数.

long size = 24524343254;
double ratio = 1.28;
size = size * 1.28; //Error Cannot implicitly convert type 'double' to 'long'
Run Code Online (Sandbox Code Playgroud)

Chr*_*Wue 6

您需要将double结果显式地转换为long(因为编译器声明没有隐式转换:

size = (long)Math.Round(size * 1.28);
Run Code Online (Sandbox Code Playgroud)

Math.Round如果你想要舍入到最近的位置你需要(有一个特殊的情况,当圆的数字在两个数字之间的中间时,那么它甚至在默认情况下四舍五入到最近).(long)(size * 1.28)如果您只想向0舍入,则可以简单地将结果转换回来.

正如@CodeInChaos所指出的,从long到double的隐式强制转换(size * 1.28将大小转换为双精度)会导致精度损失,因为精度只有53位的精度但长为64位.

  • 值得注意的是,从"long"到"double"的隐式转换是有损的.`double`有53个尾数位,而`long`有63个. (2认同)