java中的浮点数基本操作

计算机中如果用/计算的时候有小数,那还是整除吗

在计算机中,使用 / 运算符进行计算时,如果结果包含小数,那么 这不是整除

关键区别:

  • / 运算符 :表示普通除法 ,结果会是浮点数 (即包含小数部分),即使能整除,结果也可能是浮点数形式(例如 4 / 2 = 2.0)。
  • 整除 :通常指结果不包含小数部分 ,在编程中一般用专门的运算符或函数实现,例如:
    • Python 中用 // 表示整除(如 5 // 2 = 2)。
    • C/C++/Java 中,如果两个操作数都是整数类型,/ 会执行整数除法(截断小数部分),但如果是浮点数类型,则 / 会保留小数。

总结:

  • / 计算时,只要结果出现小数 ,就不是整除
  • 整除的结果是整数 ,且没有余数

java中float与double的区别

在 Java 中,floatdouble 都是浮点型 ,但它们在精度、内存占用、默认值、使用场景等方面有明显区别:


✅ 一句话总结:

float单精度double双精度默认浮点类型是 doublefloat 需要加 f 后缀。


📊 对比表:

特性 float double
位数 32 位(单精度) 64 位(双精度)
精度 ~7 位十进制有效数字 ~15 位十进制有效数字
内存占用 4 字节 8 字节
默认值 0.0f(必须加 f 0.0(默认浮点类型)
声明方式 float f = 3.14f; double d = 3.14;
使用场景 内存敏感场景(如图形、嵌入式) 大多数通用计算、科学计算
精度误差 较大,容易累积误差 较小,误差更可控

⚠️ 注意点:

java 复制代码
float a = 3.14;      // ❌ 编译错误,3.14 是 double 类型
float b = 3.14f;     // ✅ 正确
double c = 3.14;     // ✅ 正确

✅ 建议:

除非内存极其紧张,否则一律使用 double ,精度更高,误差更小,Java 默认也是 double

java中如何保留2位小数

在 Java 中,如果你想保留两位小数,有几种常见方式,取决于你是要:

  • 输出时保留两位(格式化输出)
  • 数值本身保留两位(四舍五入)

✅ 1. 输出时保留两位(格式化输出)

方法一:System.out.printfString.format
java 复制代码
double num = 3.14159;
System.out.printf("%.2f\n", num);  // 输出:3.14
String result = String.format("%.2f", num);
方法二:DecimalFormat
java 复制代码
import java.text.DecimalFormat;

double num = 3.14159;
DecimalFormat df = new DecimalFormat("0.00");
String result = df.format(num);  // "3.14"

✅ 2. 数值本身保留两位(四舍五入)

方法三:BigDecimal(推荐,精确控制)
java 复制代码
import java.math.BigDecimal;
import java.math.RoundingMode;

double num = 3.14159;
BigDecimal bd = new BigDecimal(num).setScale(2, RoundingMode.HALF_UP);
double result = bd.doubleValue();  // 3.14
方法四:数学方式(不推荐,有精度问题)
java 复制代码
double num = 3.14159;
double result = Math.round(num * 100.0) / 100.0;  // 3.14

✅ 总结建议:

目的 推荐方式
输出展示 String.format("%.2f", num)DecimalFormat
精确计算 BigDecimal.setScale(2, RoundingMode.HALF_UP)

⚠️ 不要用 Math.round(...) 做金融或精确计算,容易有浮点误差。

另外注意错误System.out.println("%.2f", num)

System.out.println() 方法不支持 传入两个参数(格式化字符串 + 变量),它只能接收单个参数(如字符串、数字、对象等)。你试图用 println 实现格式化输出(类似 C 语言的 printf),但 Java 中格式化输出需要用 System.out.printf() 或先通过 String.format() 拼接字符串,再传给 println

另外,你的格式化字符串 %.7 也不完整,正确的格式应为 %.7f(表示保留 7 位小数的浮点数)。

解决方案

使用 System.out.printf() 实现格式化输出(推荐)

printf 方法支持格式化字符串 + 变量参数,语法与 C 语言的 printf 类似:

java 复制代码
// 正确写法:%.7f 表示保留 7 位小数的浮点数
System.out.printf("%.7f", res);
// 如需换行,可在格式化字符串末尾加 \n
// System.out.printf("%.7f\n", res);

关键知识点补充

  1. 格式化符说明

    • %.7f% 是格式化标记,f 表示浮点数,.7 表示保留 7 位小数;
    • 其他常用格式化符:
      • %d:整数(int/long);
      • %s:字符串;
      • %c:字符;
      • %.2f:保留 2 位小数(常用作金额输出)。
  2. println vs printf 区别

    方法 特点 参数形式
    println 输出后自动换行,仅支持单个参数 println(单个值/字符串)
    printf 支持格式化输出,可传多个参数,需手动加 \n 换行 printf(格式化字符串, 变量1, 变量2...)
  3. 常见格式化错误

    • 遗漏格式化符的类型标识:如 %.7 应改为 %.7f(浮点数)、%.7d(整数)等;
    • 参数数量不匹配:如 printf("%.2f, %d", res) 会报错(格式化字符串需要 2 个参数,但只传了 1 个)。

错误对比

错误写法 正确写法
System.out.println("%.7", res); System.out.printf("%.7f", res);
System.out.println("%.2f", num); System.out.println(String.format("%.2f", num));

总结

解决该错误的核心是:

  1. System.out.println() 替换为 System.out.printf()(适合格式化输出);
  2. 补全格式化字符串(如 %.7%.7f);
  3. 若坚持用 println,需通过 String.format() 先生成格式化字符串。
相关推荐
源码技术栈2 小时前
springboot支持多家机构共同使用的java门诊信息管理系统源码
java·源码·诊所·医保·门诊管理·医生工作站·处方
Empty_7772 小时前
K8S-Job & Cronjob
java·linux·docker·容器·kubernetes
他是龙5512 小时前
第29天:安全开发-JS应用&DOM树&加密编码库&断点调试&逆向分析&元素属性操作
开发语言·javascript·安全
小菱形_2 小时前
【C#】LINQ
开发语言·c#·linq
爱吃大芒果2 小时前
Flutter 基础组件详解:Text、Image、Button 使用技巧
开发语言·javascript·flutter·华为·ecmascript·harmonyos
Hominid⁺2 小时前
深度解析:C 语言的 8 个翻译阶段与 GCC 编译全流程
c语言·开发语言
steins_甲乙3 小时前
C++并发编程
开发语言·c++
曹牧3 小时前
C#:foreach
开发语言·c#