如何将双倍转换为“长双倍”'作为标准

时间:2015-03-02 07:08:22

标签: c++

如何将double转换为long double作为C ++标准。我认为这样的投射不是正确的方法吗?

double value = 1.2;
long double newValue = (long double)value;

3 个答案:

答案 0 :(得分:4)

这样可以正常工作,但它不会在newValue中神奇地创造额外的精确度。也就是说,它不会产生与以下相同的结果:

long double newValue = 1.2L;

newValue设置为更接近1.2。

答案 1 :(得分:4)

标准保证long double可以支持double可以支持的所有值(或者换句话说,double可以支持的值集是一个子集long double可以表示的内容。

所以,作业

long double newValue = value;

就足够了,虽然涉及valuedoublelong double的隐式转换,而不是显式转换。这是一种不会失去精确度的转换。

C ++中明确的替代品是

long double newValue = (long double)value;    // as in original question
long double newvalue = static_cast<long double>(value);

这实际上是一种主观风格的问题,哪种选择被认为更好,因为它们都可以达到同样的效果而不会有精确的损失。

请注意,如果采用另一种方式(从long double转换为double),通常最好使用显式转换,因为转换可能会失去精度(因此可能会更改值) - 这就是为什么编译器经常(可以配置为)对这种隐式转换发出警告的原因。

答案 2 :(得分:2)

雇用static_cast:

long double newValue = static_cast<long double>(value);

或者用C ++ 11风格:

auto newValue = static_cast<long double>(value);

(称为“明确键入的初始化程序惯用语”)。