如何将
double
转换为long double
,符合C++标准。我认为仅仅进行强制类型转换并不是正确的方法?double value = 1.2;
long double newValue = (long double)value;
double
转换为long double
,符合C++标准。我认为仅仅进行强制类型转换并不是正确的方法?double value = 1.2;
long double newValue = (long double)value;
这样做是可行的,但它不会在newValue
中魔法般地创造出额外的精度。也就是说,它不会产生与以下代码相同的结果:
long double newValue = 1.2L;
这将把newValue
设置为更接近1.2的近似值。
double(foo+3)
),但是对于long double
来说这是不可能的,除非将其括在括号中,这样它就变成了C风格的转换(long double)(foo+3)
,如果真的有必要,我会这样写。 - ricilong double
可以支持 double
所有的值(或者说,double
可以支持的值是 long double
的子集)。long double newValue = value;
虽然会涉及将value
从double
隐式转换为long double
,但这已足够。这是一种不会丢失精度的转换。
C++中的显式替代方法有:
long double newValue = (long double)value; // as in original question
long double newvalue = static_cast<long double>(value);
哪种选择更好其实是主观风格的问题,因为它们都能在不损失精度的情况下达到相同的效果。
请注意,如果反过来转换(从long double
转换为double
),通常最好使用显式转换,因为转换可能会失去精度(并且因此可以改变值)-这就是为什么编译器经常(可以配置为)在这种隐式转换上发出警告的原因。
使用static_cast:
long double newValue = static_cast<long double>(value);
或者采用 C++11 风格的写法:
auto newValue = static_cast<long double>(value);
double
和long double
实现为相同类型,有些编译器确实如此)。 - Jerry Coffin