【发布时间】:2011-03-30 17:13:07
【问题描述】:
我想在 C 中将 double 转换为 float,但希望尽可能保留小数点而不做任何更改...
例如,假设我有
double d = 0.1108;
double dd = 639728.170000;
double ddd = 345.2345678
如果我错了,请纠正我,我知道浮点精度大约是点后的 5 个数字。我可以在点之后得到这五个数字,就像双精度一样吗?使上述结果如下:
float f = x(d);
float ff = x(dd);
float fff = x(ddd);
printf("%f\n%f\n%f\n", f, ff, fff);
应该打印出来
0.1108
639728.17000
345.23456
精度限制(我假设为 5)之后的所有数字都将被截断。
【问题讨论】:
-
浮点精度更准确地表述为“有效位数”而不是“小数位后的位数”。 12345678.12345 很可能无法通过浮点数特别准确地表示。
-
除了对已评论和回答的浮点数表示的误解外,您正在寻找的函数
x是从double转换为float(float)。如果您没有从默认的最接近偶数更改舍入模式,则此转换计算最接近您正在转换的double的float。没有比这个更好的转换了,所以如果这个对你的口味失去了太多的精度,请保持你的doubles 不变。 -
截断不是转换它们的最准确方法 - 345.2345678 比 345.23456 更接近 345.23457
-
你想要的都是不可能的。
float没有那么高的精度(假设它是 IEEE 单精度)。为什么要使用float而不是double?
标签: c floating-point double c89