新手,刚入坑敲代码,没有任何编程基础,刚开始看rust的教程,有一个很基础的问题,请大佬帮忙解答一下,谢谢🙏,百度了一下,没百度到结果,如果是很傻的问题,随便喷
当我用 f32 类型的变量做比如 11.1 +12.2 这样的运算的时候,结果是23.3,可是如果是f64类型的变量做运算, 11.1 + 12.2 = 23.299999999999997,请问这是为什么呢?代码和输出如下:
1、f64的运算
fn main() {
let x:f64 = 11.1 + 12.2 ;
let y:f64 = 95.51 + 4.31;
let z:f64 = 10.31 + 20.21;
println!("x is {}",x);
println!("y is {}",y);
println!("z is {}",z);
}
输出:
x is 23.299999999999997
y is 99.82000000000001
z is 30.520000000000003
2、f32的运算
fn main() {
let x:f32 = 11.1 + 12.2 ;
let y:f32 = 95.51 + 4.31;
let z:f32 = 10.31 + 20.21;
println!("x is {}",x);
println!("y is {}",y);
println!("z is {}",z);
}
输出:
x is 23.3
y is 99.82
z is 30.52
1
共 6 条评论, 1 页
评论区
写评论你要的是decimal https://crates.io/crates/decimal
关于浮点数计算的问题,果壳网的这篇文章说得比较清楚了:https://www.guokr.com/article/27173/
f32 也会出现类似的问题,比如说 1.1 + 1.2 = 2.3000002,只是楼主选的几个例子恰好都避开了。
https://0.30000000000000004.com/
简单来说就是,这个数字虽然在十进制下是“整数”,在二进制下是一种除不尽的状态,所以就会造成不准确的情况。
这是浮点数的表示问题。详情参考或者搜索ieee 754。
阮一峰的关于浮点数文章也可以略作参考看看。