我有一个程序,如果我使用浮点数,它会输出 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
答案 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