- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在一次采访中,有人问我对以下代码有何看法:
#include <stdio.h>
int main()
{
float f = 10.7;
int a;
a = f;
printf ("%d\n", a);
}
我回答:
当您在不进行强制转换的情况下将 float
更改为 int
时,编译器会发出警告。
int
将具有垃圾值,因为您没有使用强制转换。
然后,他们允许我在在线编译器上运行该程序。我不知所措。我的两个假设都是错误的。编译器没有发出任何警告,int
的值为 10。即使我将 float
更改为 10.9 或 10.3 等值,答案还是相同的。即使进行强制转换
也没有改变结果。
有人可以告诉我为什么会发生这种情况以及在什么情况下结果会有所不同。
注意:在编译时,面试官告诉我不要添加 gcc
标志。
编辑:现在我明白了, float 不会四舍五入,答案将是10。但是有人可以解释我为什么这样设计吗?为什么任何 float 在转换为 int 时都会被四舍五入?有具体原因吗?
最佳答案
标准 6.3.1.4 是这么说的:
When a finite value of real floating type is converted to an integer type other than _Bool, the fractional part is discarded (i.e., the value is truncated toward zero). If the value of the integral part cannot be represented by the integer type, the behavior is undefined.
未定义的行为部分与整数的大小和符号有关。如果您选择的整数太小而无法包含结果,则会调用未定义的行为。
The int will have garbage value as you are not using a cast
在溢出的情况下,int可能有一个垃圾值,但是强制转换的存在与否与此无关。
编译器永远不需要显示“警告”,警告不是 C 标准指定的内容,它仅涉及诊断(即某种消息,称为错误或警告)。因此,您永远不能假设每个编译器都会发出任何类型的警告。
在这种隐式浮点到整数转换的情况下,编译器根本不需要显示任何形式的诊断。然而,好的编译器会。
对于 GCC,此类警告相当草率,您必须通过添加 -Wconversion
或 -Wfloat-conversion
明确告诉它发出警告。这些是暗示的额外标志。
关于c - 为什么在 C 中 float 转换为 int 时会四舍五入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35008621/
我有这个“科学应用程序”,其中 Single 值在显示在 UI 中之前应该四舍五入。根据this MSDN article ,由于“精度损失”,Math.Round(Double, Int32) 方法
这个问题类似于Chrome 37 calc rounding 但实际问题有点复杂,提供的解决方案不适用于这种情况: #outerDiv, #leftDiv, #middleDiv, #rightDiv
假设有一堆从 pnorm() 返回的数据,这样您就有了 .0003ish 和 .9999ish 之间的数字。 numbers <- round(rnorm(n = 10000, mean =
我想有效地将unsigneda整数除以2的任意幂,然后取整。所以我在数学上想要的是ceiling(p/q)0。在C语言中,不利用q受限域的Strawman实现可能类似于以下function1: /
我正在尝试获取 #value_box 的值以显示 100.5 但它一直在向上舍入。有谁知道我可以做些什么来让它显示小数位? jsfiddle //returns 101 $("#value_box
我有一段 JavaScript 代码 shipingcostnumber * parseInt(tax) / 100 + shipingcostnumber 返回数字为6655.866558,因此我将
我有一个关于 PostgreSQL 9.2 中 float 的新手问题。 是否有直接舍入 float 的函数,即不必先将数字转换为数字类型? 另外,我想知道是否有一个函数可以按任意度量单位舍入,例如最
这个问题已经有答案了: Rounding to nearest 100 (7 个回答) 已关闭10 年前。 我正在尝试将数字四舍五入到 100。 示例: 1340 should become 1400
我试图找出使用整数存储在列表中的其他两个数字之间的任何n在整数列表中找到最接近的值ROUNDED DOWN的最佳方法。在这种情况下,所有整数都将始终是无符号的,以防万一。 假设如下: 列表始终从0开始
我想将一个 BigDecimal 四舍五入到小数点后两位,但是当使用 round 方法时,它似乎没有双舍入: BigDecimal.new('43382.0249').round(2).to_s('F
我正在使用格式如下的财务数据进行计算: . 基本上,在我的程序中我遇到了一个浮点错误。例如,如果我有: 11.09 - (11.09 * 0.005) = 11.03455 我希望能够使用 11.03
有整型变量,电压单位为毫伏。 signed int voltage_mv = 134; //134mV 我有 2 段显示,我想显示百分之一伏特。 如何在一次操作中将毫伏转换为百分之一伏?没有 IF 语
这是我将数字四舍五入到两位小数的函数,但是当四舍五入的数字为 1.50 时,它似乎忽略尾随零并只返回 1.5 public static double roundOff(double number)
您好,我在将数字四舍五入到 -0 而不是 0 时遇到了问题 代码: 输出:-0 预期输出:0 我一直在寻找任何解决方案,但没有找到。 请解释并帮助我为什么它四舍五入为 -0 而不是 0?谢谢 最佳答
我正在使用 Java 的 Random 生成随机数:1.0、1.1 - 10 Random random = new Random(); return (double) ((random.nextIn
基本上,我有一个数字: 我基本上想做一些数学运算来创建这个数字 80。 如果数字是 62.7777777778,则数字将为 60。 我希望数字像这样四舍五入: 20, 40, 60, 80, 100
我希望显示来自 NSDate 对象的月数。 //Make Date Six Months In The Future NSCalendar *calendar = [[NSCalendar alloc
下面是一些小代码来说明我所看到的 float floater = 59.999f; DecimalFormat df = new DecimalFormat("00.0"); System.out.p
我现在开始使用 android 和 java,但遇到了问题。 I have a result x = 206.0548. And y = 206, both of type double How do
我有一个 ruby 散列数组,其中包含两个键,'tier' 和 'price'。对于给定的价格,我想退回等级。 这对于精确匹配来说已经足够简单了,但是我如何通过将我的输入值四舍五入到数组中的下一个
我是一名优秀的程序员,十分优秀!