c# - 如何将长乘以双

标签 c# double rounding long-integer multiplication

很抱歉问了这样一个初学者问题,但我想不通。

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

long size = 24524343254;
double ratio = 1.28;
size = size * 1.28; //Error Cannot implicitly convert type 'double' to 'long'

最佳答案

您需要将 double 结果显式转换回 long(如编译器所述 - 没有隐式转换):

size = (long)Math.Round(size * 1.28);

如果要四舍五入到最接近的值,则需要 Math.Round(有一种特殊情况,当要四舍五入的数字在两个数字的中间时,默认情况下它会四舍五入到最接近的偶数) .如果您只想向 0 舍入,也可以简单地将结果转换回 (long)(size * 1.28)

正如@CodeInChaos 所指出的,从 long 到 double 的隐式转换(size * 1.28 将首先将 size 转换为 double)会导致精度损失,因为doubles only have a precision of 53 bits但 long 是 64 位。

关于c# - 如何将长乘以双,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650710/

相关文章:

C 双和错误

c# - 业务层基于角色的授权

java - 双数组是对象吗?

c# - 什么是文本文件中的 ?

c - 在不损失精度的情况下获取整数中 double 值的小数部分

algorithm - 准确的单程便士计算

java - Java 中 BigDecimal 的舍入模式

javascript - Javascript Math.Round 与 C# Math.Round 有多接近?

c# - 在 silverlight 问题中绑定(bind)到 List<object>

c# - 使用没有代码隐藏的 Azure AD