jjzjj

setprecision

全部标签

c++ - GCC 与 VS2013 中 std::setprecision(0) 的正确行为

根据我使用的编译器,我在n=0时得到这个函数的不同输出。std::stringToStrWPrec(doublea_value,constintn){std::ostringstreamout;out(GCC)4.8.320140911(RedHat4.8.3-9)为ToStrWPrec(1.2345678,0)返回1。对于相同的代码,VS2013返回1.2346。我的问题是:setprecision的正确/标准行为是什么?什么是使用setprecision的好替代方法?这是根据下面的评论更新的代码std::stringToStrWPrec(doublea_value,constint

c++ - 在 C++ 中没有 **std::fixed** 的 **std::setprecision()** 的作用是什么?

如教程所示http://www.cplusplus.com/reference/iomanip/setprecision///setprecisionexample#include//std::cout,std::fixed#include//std::setprecisionintmain(){doublef=3.14159;std::coutstd::cout行不打印5个十进制数字,但在设置std::fixed后,setprecision有效正如预期的那样。这是为什么?。没有std::fixed的std::setprecision()有什么作用? 最佳答

c++ - 为什么 std::setprecision(6) 在固定宽度模式下流式传输超过六位数字?

以下代码的输出:#include#include#include#include#include#includeusingnamespacestd;inlinestringlexical_cast(constfloatarg){stringstreamss;ss::digits10)::digits10是:632.123455我期望并想要:632.1234因为据我所知,这就是float可以在我的系统上可靠地为我提供的范围。我怎样才能说服IOStreams按我的意愿行事? 最佳答案 在固定宽度模式中,“精度”设置用作小数位数,与科学模

c++ - 输出到精确流 float

我对float精度有疑问:intmain(void){doubleb=106.829599;floata=b;std::cerr结果是:a=106.83;b=106.83a=106.8296;b=106.8296所以,我的问题是为什么第一行的数字这么短(我期待看到106.829)gcc4.1.2,我也在LWS做了测试 最佳答案 实际上,106.829599四舍五入到6位数字(3位小数)是106.830,显示为106.83,因为setprecision的6位精度被赋予了只是一个最大值。Thedecimalprecisiondeterm

c++ - 如何指定 setprecision 舍入

当流到标准输出时,我可以指定setprecision来舍入double值吗?ofile输出:0.756247615801ofile输出:0.756248但我需要输出为0.756247谢谢 最佳答案 还有std::fesetround来自,设置舍入方向:#include#include#include#includeintmain(){doubleruntime=0.756247615801;//Setroundingdirectionandoutputwithsomeprecision:constautoprev_round=std

c++ - 在 C 中使用 printf 等效于 C++ std::setprecision(20)

我想以十进制表示法完全精确地打印double(但数字末尾没有额外的零)。在C++中,我可以使用:std::setprecision(20);cout使用printf的等效C代码是什么? 最佳答案 您可以使用“%.20g”说明符。g恕我直言,通常比f好,因为它不打印尾随零,并且明智地处理大/小值(更改为e格式)。另请注意,使用“g”说明符时,精度(在本例中为“20”)指定有效位数而不是小数点后的位数。 关于c++-在C中使用printf等效于C++std::setprecision(20)

c++ - 为什么编译器会警告 setprecision 中的隐式转换?

当我编译下面的代码时,编译器给我警告:"Implicitconversionlosesintegerprecision:'std::streamsize'(aka'long')to'int'".我对这个警告有点困惑,因为我只是尝试保存精度的当前值,以便稍后将其设置回原始值。#include#includeintmain(){std::streamsizeprec=std::cout.precision();std::cout在这种情况下,保存精度值并稍后将其恢复的正确方法是什么? 最佳答案 看起来这只是标准规范中的一个疏忽。ios_

C++ float vs double cout setprecision 奇怪之处(新手)

谁能解释为什么当我使用setprecision()时这两个相同值的变量可以输出不同的值?#include#includeintmain(){floata=98.765;doubleb=98.765;//std::couta的输出将为98.76,而b的输出将为98.77。 最佳答案 那些变量不具有相同的值。当您将98.765的字面值double硬塞进float时,它必须进行最佳匹配,并且会损失一些精度。如果将精度更改为50,您可以很容易地看到这一点,您还会看到即使是double也不能准确表示该值:98.7649993896484375

c++ - c++ 中的 setprecision 是否是圆的?如果是这样,为什么我会看到这个?

当我预期为0.29848时,以下代码片段输出0.29847:doublef=0.298475;cout然而,对于其他示例,我观察到四舍五入:doublef=0.123459;cout输出:0.12346和doublef=0.123454;cout输出:0.12345 最佳答案 数字0.298475不能完全用double表示(因为它不是分母为2的幂的分数,即11939/40000),并且实际存储的数字实际上更接近0.29847而不是0.29848。 关于c++-c++中的setprecis

C++ setprecision用法详解

C++setprecision用法详解可以通过使用setprecision操作符来控制显示浮点数值的有效数字的数量。导入头文件:#include#include#include//Headerfileneededtousesetprecisionusingnamespacestd;intmain(){doublenumber1=132.364,number2=26.91;doublequotient=number1/number2;coutquotientendl;coutsetprecision(5)quotientendl;coutsetprecision(4)quotientendl;c