为什么float输出的结果不同于double?

时间:2018-11-06 21:50:16

标签: c double

我有一个程序,如果我使用浮点数,它会输出 protected void connectionTest() { java.sql.Connection conn = null; try { final String mysqlConnUrl = "jdbc:postgresql://***.***.***.***:5432/databaseName"; try { Class.forName("org.postgresql.Driver"); Properties props = new Properties(); props.setProperty("user", "root"); props.setProperty("password", "root"); props.setProperty("ssl", "true"); conn = DriverManager.getConnection(mysqlConnUrl, props); } catch (NoClassDefFoundError i) { i.printStackTrace(); } conn.close(); } catch (Exception ex) { ex.printStackTrace(); } } ,但是如果我使用double则是29.325001那是正确的结果)。

我以为float可以四舍五入到小数点后14位,但结果却与预期不同?

以下代码:

29.325000

1 个答案:

答案 0 :(得分:1)

  

“我认为float会舍入到小数点后14位”

对代码精度的期望太高了。

Typical float显示为十进制,按预期编码为至少6个前导有效数字。 29.325001是8。

使用FLT_DIG

// printf("%.6f", total);
printf("%.*e\n", FLT_DIG - 1, total);
printf("%.*g\n", FLT_DIG, total);

输出

2.93250e+01
29.325