C++ C++;浮点数

C++ C++;浮点数,c++,C++,也许,这是一个非常简单的问题,但我无法得到答案。我已经搜索了很长一段时间(现在谷歌认为我正在发送自动查询) int n=4.35*100; cout 不幸的是,这仅仅是一个起点,因为当时的语言在进行类型转换等方面引入了自己的弱点。在这种情况下,您仅仅创建了一个无法精确表示常量4.35的情况,因此4.35*100更像是434.99999999999,而转换为int则是trunc,不round4.35的内部表示最终为4.34999999或类似值。乘以100将移动小数点,转换为int时.9999将被删

也许,这是一个非常简单的问题,但我无法得到答案。我已经搜索了很长一段时间(现在谷歌认为我正在发送自动查询)

int n=4.35*100;
cout


不幸的是,这仅仅是一个起点,因为当时的语言在进行类型转换等方面引入了自己的弱点。在这种情况下,您仅仅创建了一个无法精确表示常量4.35的情况,因此4.35*100更像是434.99999999999,而转换为
int
则是
trunc
,不
round

4.35的内部表示最终为4.34999999或类似值。乘以100将移动小数点,转换为int时.9999将被删除(截断)


编辑:正在查找尼克发布的链接。:)

如果运行此语句:

cout << 4.35

cout浮点数。许多(从技术上讲,是无限数量的…)值不能像浮点那样精确地存储或操作。4.35似乎是其中之一。它被存储为实际上低于4.35的值,因此是你的结果。

当一个
float
被转换为
int
时,小数部分被截断,转换不会取最接近
int
的值

4.35不能准确地表示为
浮点数
,最近的可表示数(我们可以推断)比4.35小很多,即4.34999,所以当乘以100,你得到434.999

如果要将正的
float
转换为最接近的
int
,则应在转换为
int
之前添加0.5

例如

intn=(4.35*100)+0.5;

如果在乘法之前将4.35转换为
int
,结果会是434吗?那不是400美元吗?只是为了排除你的一个解释。如果你做了
inty=(int)(4.35*100)如果你要调用函数,你可以选择一个合适的函数来得到你需要的答案,你也可以在C++中完成。但是,在示例代码中,您没有调用函数,而是使用了该语言提供的隐式类型转换。4.35不是完全可表示的。下一个最接近的双精度值似乎是(在您的例子中)4.34999。。。乘以100,结果是434.999。。。因此转换为434,它仅仅是在C++中吗?这在C#中不会发生。。int n=转换为32(4.35*100);控制台写入线(n);如果你施法,它确实会发生在C#中,但你没有施法到32轮(正如文档中非常清楚地说明的那样)。你也可以用C++来(也就是,代码< >楼层< /代码>或<代码> CEIL< /Cord>。但是添加/减去0.5,使其成为舍入函数),实际的函数在C++ 11中有一个循环函数。
cout << 4.35
int n = (4.35 * 100) + 0.5;
cout << n;