c - float 不准确?

标签 c floating-point

我提示用户输入一个 float 。我将数字保存在 float 变量中并将其乘以 100 使其成为整数。只允许 2 位小数,所以这是一件相当容易的事情。现在奇怪的部分:

  1. 用户输入:0.1 -> 输出:100
  2. 用户输入:1.1 -> 输出:110
  3. 用户输入:1.5 -> 输出:150
  4. 用户输入:2.1 -> 输出:209.999985
  5. 用户输入:2.5 -> 输出:250
  6. 用户输入:3.8 -> 输出:380
  7. 用户输入:4.2 -> 输出:419.999969
  8. 用户输入:5.6 -> 输出:560
  9. 用户输入:6.0 -> 输出:600
  10. 用户输入:7.5 -> 输出:750
  11. 用户输入:8.1 -> 输出:810.000061
  12. 用户输入:9.9 -> 输出:989.999969

我只试过这个东西直到 10 点。

引用 Why Are Floating Point Numbers Inaccurate?我知道了这种行为背后的原因,但是没有任何方法可以知道哪个数字会表现异常吗?

最佳答案

我不知道有什么方法可以预测哪些数字会做到这一点,但大多数程序员并不关心。

您没有指定您使用的语言,但如果您想将某些内容从浮点表示更改为整数表示,您通常必须使用类似 Double.intValue( ) 或 Java 中的 Double.longValue() 或转换运算符 (int)double_value;

这些技术通常只是去掉数字的小数部分。您可能想改用舍入函数。同样,在 Java 中,如 [javadoc] ( http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html )

中所述,它将是 Math.round()

关于c - float 不准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29517682/

相关文章:

c++ - 我应该对循环 float 使用乘法还是除法?

c++ - 如何使用 std::signaling_nan?

tensorflow - tf.round() 到指定的精度

c - 有没有办法在 C 的 printf() 函数中控制 float 的宽度和精度?

c - (分配中的左值无效)当我运行它时发生此错误。这是什么意思?

java - 为什么 float 打印最多只能打印 8 位数字?

c - C 中的左值、右值和数组初始化

c++ - C POSIX API 是否与 C++ STL 兼容

c - 尝试设置并打印指针的值

c - 如何导航 UTF-8 文本文件