很难解释这个问题,我想将一个双数转换为整数而不用舍入小数点后的值.例如
double a = 123.456
Run Code Online (Sandbox Code Playgroud)
我想转换成为
int b = 123456
Run Code Online (Sandbox Code Playgroud)
我想知道有多少位数,并在计算成后将其移回 123.456
PS:我只想要纯粹的数学方法来解决这个问题,而不用计算它的特性.
R..*_*R.. 12
抱歉,您的问题无法解决,因为数字123.456 不是双重存在.它舍入到123.4560000000000030695446184836328029632568359375,删除小数点后,此数字显然不适合任何整数类型.
如果您希望123.456被视为确切的数字123.456,那么唯一的远程简单方法是将其转换为字符串并从字符串中删除小数点.这可以用类似的东西来实现
snprintf(buf, sizeof buf, "%.13f", 123.456);
Run Code Online (Sandbox Code Playgroud)
然而,实际上计算出你想要打印它的地方的数量是相当困难的.如果你使用太多,你最终将获得我上面显示的部分确切值.如果你使用的太少,那么显然你会放弃你想要保留的地方.