如何按自定义规则对uint与double类型值的和进行取整?
自定义取整逻辑的实现方案
核心思路
- 将
uint类型的x转换为double,与y相加得到总和sum - 分离总和的整数部分与小数部分
- 根据小数部分所在区间,按规则计算最终取整结果
代码示例(C语言)
#include <stdio.h> #include <math.h> int main() { unsigned int x; double y; // 获取用户输入 printf("输入x(uint类型):"); scanf("%u", &x); printf("输入y(double类型):"); scanf("%lf", &y); // 计算总和 double sum = (double)x + y; // 分离整数与小数部分 double integer_part; double fractional_part = modf(sum, &integer_part); // 处理浮点数精度误差,避免存储偏差导致误判 fractional_part = fabs(fractional_part); double result; if (fractional_part <= 0.25 + 1e-9) { result = integer_part; } else if (fractional_part <= 0.75 + 1e-9) { result = integer_part + 0.5; } else { result = integer_part + 1.0; } printf("最终取整结果:%.1f\n", result); return 0; }
代码示例(Java语言)
import java.util.Scanner; public class ATMRoundingLogic { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("输入x(uint类型,用int替代):"); int x = input.nextInt(); System.out.print("输入y(double类型):"); double y = input.nextDouble(); double sum = (double)x + y; double integerPart = Math.floor(sum); double fractionalPart = sum - integerPart; // 处理精度问题 fractionalPart = Math.abs(fractionalPart); double result; if (fractionalPart <= 0.25 + 1e-9) { result = integerPart; } else if (fractionalPart <= 0.75 + 1e-9) { result = integerPart + 0.5; } else { result = integerPart + 1.0; } System.out.printf("最终取整结果:%.1f%n", result); input.close(); } }
关键说明
- 类型转换:必须将
uint转成double后再与y相加,避免整数截断问题 - 精度处理:由于
double无法精确存储所有小数(比如0.25可能被存为接近但略小的数值),判断时加入1e-9的偏差值,防止误判 - 负数兼容:代码中用
fabs处理小数部分,确保即使总和为负数(比如取款超余额)也能正确判断小数区间
内容的提问来源于stack exchange,提问作者LavidaLoca
相关产品推荐
相关产品推荐

