如何将double
转换为long double
作为C ++标准。我认为这样的投射不是正确的方法吗?
double value = 1.2;
long double newValue = (long double)value;
答案 0 :(得分:4)
这样可以正常工作,但它不会在newValue
中神奇地创造额外的精确度。也就是说,它不会产生与以下相同的结果:
long double newValue = 1.2L;
将newValue
设置为更接近1.2。
答案 1 :(得分:4)
标准保证long 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
),通常最好使用显式转换,因为转换可能会失去精度(因此可能会更改值) - 这就是为什么编译器经常(可以配置为)对这种隐式转换发出警告的原因。
答案 2 :(得分:2)
雇用static_cast:
long double newValue = static_cast<long double>(value);
或者用C ++ 11风格:
auto newValue = static_cast<long double>(value);
(称为“明确键入的初始化程序惯用语”)。