在Vala中如何对double/float类型数值进行四舍五入?
Vala浮点数保留两位小数解决方案
方案1:直接格式化输出(最常用)
如果仅需要在输出时展示两位小数,直接使用Vala内置的printf风格格式化语法即可,%.2f格式符会自动对浮点数做四舍五入保留两位小数处理:
var x = 0.10000000000000001; // 直接打印输出 stdout.printf("%.2f\n", x); // 输出结果:0.10 // 如果需要先获取格式化后的字符串再做后续处理 string res_str = "%.2f".printf(x); stdout.printf("%s\n", res_str); // 同样输出0.10
方案2:数值层面保留精度
如果需要先得到保留两位小数的浮点数值用于后续计算,可以通过缩放+四舍五入的方式处理:
var x = 0.10000000000000001; // 先放大100倍做四舍五入,再缩小回原量级 double res_num = Math.round(x * 100) / 100.0; // 输出验证 stdout.printf("%.2f\n", res_num); // 输出0.10
提示:浮点数本身存在固有精度误差,如果是金额计算这类对精度要求极高的场景,建议使用专门的十进制数值类型处理,避免浮点运算累积出现误差。
内容的提问来源于stack exchange,提问作者pether
相关产品推荐
相关产品推荐

