我提示用户输入一个 float 。我将数字保存在 float 变量中并将其乘以 100 使其成为整数。只允许 2 位小数,所以这是一件相当容易的事情。现在奇怪的部分:
- 用户输入:0.1 -> 输出:100
- 用户输入:1.1 -> 输出:110
- 用户输入:1.5 -> 输出:150
- 用户输入:2.1 -> 输出:209.999985
- 用户输入:2.5 -> 输出:250
- 用户输入:3.8 -> 输出:380
- 用户输入:4.2 -> 输出:419.999969
- 用户输入:5.6 -> 输出:560
- 用户输入:6.0 -> 输出:600
- 用户输入:7.5 -> 输出:750
- 用户输入:8.1 -> 输出:810.000061
- 用户输入: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/