我正在读"浮动"数字,最多2位小数,如下所示:
122
122.3
122.34
Run Code Online (Sandbox Code Playgroud)
并需要通过乘以将它们转换为整数值(想象存储美元/美分)
int i;
double d;
scanf( "%lf", &d );
i = d * 100;
Run Code Online (Sandbox Code Playgroud)
例如18.56将被转化为1855
有没有办法将值读取为double并将其正确转换为int?
TIA
转换为带舍入的int的最简单方法:
i = (int)floor(d * 100 + 0.5);
Run Code Online (Sandbox Code Playgroud)
如果您的号码总是积极的:
i = (int)(d * 100 + 0.5);
Run Code Online (Sandbox Code Playgroud)
1.565和1.575之间的值将变为157. 2.135和2.145之间的值将变为214.
这样,如果你有一个像1.56999的数字,它将变为157.
这并不是"解决精确损失" - 无论这意味着什么.它只是四舍五入.
如果一个值恰好在两个数字之间(例如d为1.125),那么您可能会得到意想不到的结果.在这种情况下,所有数字只有两位小数,所以这不是问题.如果数字不限于更多的小数位,您需要更仔细地考虑如何处理像1.125这样的数字.