C#如何将double数值第二位小数向上取整为10的倍数
解决方案
你尝试的第5种写法Math.Ceiling(z*10)/10 已经得到了正确的数值结果,double类型中14.1和14.10的存储值完全一致,你需要的14.10只是字符串展示时保留两位小数的效果,按如下方式实现即可:
基础实现(满足普通精度需求)
double z = 14.066666; // 先计算得到数值结果:小数点后1位向上取整 double calculatedValue = Math.Ceiling(z * 10) / 10; // 格式化输出为保留两位小数的字符串,得到"14.10" string displayResult = calculatedValue.ToString("0.00");
高精度实现(避免double浮点精度误差)
如果业务对数值精度要求较高,建议转decimal类型做计算,避免浮点运算的精度丢失问题:
double z = 14.066666; decimal decValue = Convert.ToDecimal(z); decimal calculatedDec = Math.Ceiling(decValue * 10) / 10; // 如需转回double类型 double calculatedValue = Convert.ToDouble(calculatedDec); // 格式化输出得到"14.10" string displayResult = calculatedDec.ToString("0.00");
错误尝试原因说明
Math.Ceiling(z):直接对整数部分向上取整,所以得到15,不符合保留1位小数向上取整的要求Math.Round系列方法:用的是四舍五入规则,不是你需要的向上取整逻辑,结果不符合预期Math.Ceiling(z*100)/100.0:是对小数点后两位做向上取整,得到14.07,没有达到你要的进位到小数点后1位的要求
内容的提问来源于stack exchange,提问作者Radu Bartan
相关产品推荐
相关产品推荐

