摘要

这是不经意间发现的,以前却没有留意的。我将单位为米的浮点类型转为厘米时,发现多出来了一大串后缀。

正文

浮点数在计算机中不能精确表示所有的十进制小数,所以在进行运算时可能会出现微小的误差。

浮点数精度问题主要影响使用二进制浮点表示法的编程语言。大多数主流编程语言(如 Java、C、C++、Python、JavaScript 和 Ruby)都使用 IEEE 754 标准来表示浮点数,因此都会受到这一问题的影响。

直观的测试

text
1
2
0.14*100
0.12*100

image-20240917203113252.png

我后面采取的方式是四舍五入保留一位小数。

java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/**
 * 将传入的 double 转换为小数点后一位
 *
 * @param value 要转换的 double 值
 * @return 转换后的小数点后一位的字符串
 */
public static double roundToOneDecimal(double value) {
    BigDecimal bd = new BigDecimal(value);
    BigDecimal roundedValue = bd.setScale(1, RoundingMode.HALF_UP);  // 四舍五入到小数点后一位
    return roundedValue.doubleValue();  // 返回字符串形式的结果
}