double型强转int型--向下取整;+0.5实现四舍五入

本文展示了一个简单的Java程序,该程序演示了不同数值类型之间的转换,并通过自定义方法进行四舍五入处理。主要涉及double和float类型的转换为整型,以及自定义方法的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double a = 100.1;
		double b = 100.5;
		float c = 100.1f;
		float d = 100.5f;
		System.out.println((int)a);
		System.out.println((int)b);
		System.out.println(get(a));
		System.out.println(get(b));
		System.out.println(get(c));
		System.out.println(get(d));
	}

	private static int get(double n){
		return (int) (n+0.5);
	}
}

#include <iostream> #include <cstdio> // #include <cmath> using namespace std; //错误答案 // int main(){ // double N; // cin >> N; // double moneys[12] = {100.00,50.00,20.00,10.00,5.00,2.00,1.00,0.50,0.25,0.10,0.05,0.01}; // bool flag1 = 1; // bool flag2 = 1; // printf("NOTAS:\n"); // for (int i = 0;i < 6;i ++){ // printf("%d nota(s) de R$ %.2lf\n",(int)(N/moneys[i]),moneys[i]); // // N %= moneys[i]; 坑1:浮点数不能用%,只可整数,无符号整数使用 // N = fmod(N,moneys[i]); // } // printf("MOEDAS:\n"); // for (int i = 6;i < 12;i ++){ // printf("%d moeda(s) de R$ %.2lf\n",(int)(N/moneys[i]),moneys[i]); // N = fmod(N,moneys[i]); // } // return 0; // } // 坑2:上面做法错误原因——浮点数表示不准确(因为某些十进制小数在计算机二进制表示为 // 循环小数,而二进制只能用有限位的数字表述,所以最终只能用极其近似的二进制表示),和 // 因为浮点数表示不准确进而导致的舍入误差(由于只能用极其近似的二进制表示,故浮点数进 // 行运算时,只能算出非常近似于预期值的结果) // 解决办法:把需要运算的浮点数同乘以n+0.5,整数再运算,避开舍入误差,最后再/n // 正确答案 int main() { double N; cin >> N; int amount = (int)(N * 100 +0.5); int moneys[12] = {10000,5000,2000,1000,500,200,100,50,25,10,5,1}; printf("NOTAS:\n"); for (int i = 0; i < 6; i++) { printf("%d nota(s) de R$ %.2lf\n", amount / moneys[i], moneys[i] / 100.0); amount %= moneys[i]; // 使用整数的取余 } printf("MOEDAS:\n"); for (int i = 6; i < 12; i++) { printf("%d moeda(s) de R$ %.2lf\n", amount / moneys[i], moneys[i] / 100.0); amount %= moneys[i]; } return 0; }翻译成python代码
03-26
### C语言中通过加0.5实现四舍五入的原理 在C语言中,通过加`0.5`来实现四舍五入是一种常见的技巧。其核心思想在于利用数值处理特性完成近似操作。 #### 基本原理 当需要对一个小数进行四舍五入时,可以通过将其加上`0.5`后再向下取整的方式实现。这是因为对于任何小数部分小于等于`0.5`的数来说,加上`0.5`之后再向下取整的结果仍然是原数的整数部分;而对于小数部分大于`0.5`的数,则会在加上`0.5`后跨过下一个整数边界,从而被正确地向上取整[^1]。 例如: - 对于正数 `2.3`,执行 `(int)(2.3 + 0.5)` 结果为 `2`; - 而对于正数 `2.7`,执行 `(int)(2.7 + 0.5)` 则结果为 `3`。 这种逻辑同样适用于负数情况下的调整,只是需要注意方向上的差异——即减去`0.5`而非增加它[^2]。 #### 实现方法 以下是几种具体的实现方式: ##### 方法一:简单版本(仅支持基本功能) 最基础的形式可以直接采用如下代码片段展示的方法[^1]: ```c #include<stdio.h> int main(){ float a; scanf("%f", &a); printf("%d",(int)(a+0.5)); } ``` 此段程序接受输入的一个浮点数,并打印经过四舍五入后的整数值。 ##### 方法二:考虑更多细节(区分正负数分别处理) 为了更精确地覆盖所有可能的情形,特别是涉及负数的时候,可以采取更加细致的做法,像下面这样[^2]: ```c #include <stdio.h> int main() { double a = 0.0; scanf("%lf", &a); if (a >= 0){ printf("%d\n", (int)(a + 0.5)); } else{ printf("%d\n", (int)(a - 0.5)); } return 0; } ``` 这段代码能够很好地应对无论是正值还是负值都需要做适当修正才能达到真正的“四舍五入”。 ##### 方法三:高级应用—指定精度 如果希望不仅仅局限于简单的整数级别变换,还可以扩展到任意指定位数的小数点保留形式下也适用该原则的话,那么就需要引入额外库函数如`<math.h>`中的幂运算以及字符串格式化输出等功能共同协作完成任务[^4]: ```c #include <stdio.h> #include <math.h> int main(){ double number; int digits; printf("Enter the Number : "); scanf("%lf",&number); printf("How many Decimal Places ? "); scanf("%d",&digits); if(number>=0) number=(double)((long long)(number * pow(10,digits)+0.5))/(pow(10,digits)); else number=(double)((long long)(number * pow(10,digits)-0.5))/(pow(10,digits)); printf("%.8lf ",number ); } ``` 以上例子展示了如何根据不同需求灵活运用这一技术手段解决问题的能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

obession

觉得有用可以打赏咖啡一杯~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值