相关疑难解决方法(0)

像sprintf一样的std :: string格式

我必须格式化std::stringsprintf,并将其发送到文件流.我怎样才能做到这一点?

c++ string formatting stl

412
推荐指数
17
解决办法
77万
查看次数

Printf宽度说明符,用于保持浮点值的精度

是否有printf宽度说明符可以应用于浮点说明符,该说明符会自动将输出格式化为必要的有效位数,以便在重新扫描字符串时,获取原始浮点值?

例如,假设我打印float2小数位数的精度:

float foobar = 0.9375;
printf("%.2f", foobar);    // prints out 0.94
Run Code Online (Sandbox Code Playgroud)

当我扫描输出时0.94,我没有符合标准的保证我将获得原始的0.9375浮点值(在这个例子中,我可能不会).

我想要一种方法告诉printf自动将浮点值打印到必要的有效位数,以确保它可以扫描回传递给的原始值printf.

我可以使用一些宏float.h导出要传递的最大宽度printf,但是是否已经有一个说明符可以自动打印到必要的有效位数 - 或者至少是最大宽度?

c floating-point printf c99 floating-point-precision

84
推荐指数
8
解决办法
21万
查看次数

如何cout一个带有n个小数位的浮点数

可能重复:
如何使用cout以完全精度打印double值?

float a = 175.;
   cout << a;
Run Code Online (Sandbox Code Playgroud)

如果我运行前面的代码我将只得到175,我怎么能用(例如)3个小数位来输出数字,即使它们是零...我怎么能打印"175.000"?

c++ formatting cout

25
推荐指数
2
解决办法
7万
查看次数

设置回默认精度C++

我希望在比较期间控制double的精度,然后使用C++返回默认精度.

我打算用来setPrecision()设定精度.那么将精度设置回默认值的语法是什么(如果有的话)?

我正在做这样的事情

std::setPrecision(math.log10(m_FTOL));
Run Code Online (Sandbox Code Playgroud)

我做了一些事情,之后我想回到默认的双重比较.

我这样修改了,我还有一些错误

std::streamsize prec = std::ios_base::precision();
std::setprecision(cmath::log10(m_FTOL));
Run Code Online (Sandbox Code Playgroud)

cmath编译时为false,编译时为std::ios_basefalse.你能帮忙吗?

谢谢.

c++ floating-point precision default rounding

20
推荐指数
3
解决办法
3万
查看次数

为什么(int)55 == 54在C++中?

所以我正在学习C++.我已经获得了"C++编程语言"和"有效的C++",而且我正在运行Project Euler.问题1 ... dunzo.问题2 ......没那么多.我在VS328上使用Win32控制台应用程序.

什么是斐波纳契数列的所有偶数项的总和低于400万?

它没有工作,所以我减少到100的测试用例......

这是我写的......

// Problem2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Project Euler Problem 2:\n\n";
    cout << "Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:\n\n";
    cout << "1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\n";
    cout …
Run Code Online (Sandbox Code Playgroud)

c++ fibonacci

19
推荐指数
2
解决办法
6718
查看次数

.NET的Double.ToString方法中的Round-two错误

在数学上,考虑这个问题的有理数

8725724278030350 / 2**48
Run Code Online (Sandbox Code Playgroud)

其中**在分母表示取幂,即,分母是248次方.(分数不在最低方面,通过2可还原的)此数目是恰好作为表示的System.Double.它的十进制扩展是

31.0000000000000'49'73799150320701301097869873046875 (exact)
Run Code Online (Sandbox Code Playgroud)

撇号不代表缺失的数字,而只是标记圆形到15的分数.将执行17位数字.

请注意以下内容:如果此数字四舍五入为15位,则结果为31(后跟十三0秒),因为下一个数字(49...)以a开头4(意味着向下舍入).但如果数字首先四舍五入为17位,然后四舍五入为15位,结果可能是31.0000000000001.这是因为第一次舍入通过将49...数字增加到50 (terminates)(下一个数字73...)而向上舍入,然后第二次舍入可能再次向上舍入(当中点舍入规则表示"从零开始舍入"时).

(当然,还有更多具有上述特征的数字.)

现在,事实证明.NET的这个数字的标准字符串表示是"31.0000000000001".问题:这不是一个错误吗?通过标准字符串表示,我们指的String是由参数Double.ToString()实例方法产生的,当然,该方法与生成的方法相同ToString("G").

需要注意的一个有趣的事情是,如果你投的上述号码System.Decimal,然后你得到一个decimal31准确!请参阅此Stack Overflow问题,以讨论将a转换DoubleDecimal包含第一个舍入到15位的令人惊讶的事实.这意味着转换为Decimal正确的舍入到15位数,而调用ToSting()是不正确的.

总而言之,我们有一个浮点数,当输出给用户时,是31.0000000000001,但当转换为Decimal …

.net c# floating-point rounding

15
推荐指数
2
解决办法
1965
查看次数

c ++ cout << [double]不打印小数位

我有一个简单的C++程序,我认为会打印出f和g中定义的double值作为double ...但是C++将它们打印为整数.我检查了cout的默认精度,当我运行它时,输出显示默认精度应为6,所以我很困惑为什么双打不正确.

#include <iostream>
#include <stdio.h>
int main() {

    double f = 735416.416898;
    double g = f + 0.3;

    std::cout << "default precision is " << std::cout.precision() << std::endl;

    std::cout << "[c++] f = " << f << std::endl;
    std::cout << "[c++] g = " << g << std::endl;
    printf("[c] f = %f\n", f);
    printf("[c] g = %f\n", g);

    f = 735416.516898;
    g = f + 0.3;

    std::cout << "[c++] f = " << f << std::endl;
    std::cout << "[c++] …
Run Code Online (Sandbox Code Playgroud)

c++

14
推荐指数
1
解决办法
1万
查看次数

如何在输出控制台中显示更多小数?

我想输出一个双精度值的全精度.但是,使用cout功能时,即使精度约为15-16位,它也只显示前6位数字.

如何让我的程序显示整个值,包括幅度(功率)组件?

c++ console

11
推荐指数
3
解决办法
2万
查看次数

为什么在C++中pow(10,5)= 9,999

最近我写了一段代码:

const int sections = 10;

for(int t= 0; t < 5; t++){
   int i = pow(sections, 5- t -1);  
   cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)

结果是错误的:

9999
1000
99
10
1
Run Code Online (Sandbox Code Playgroud)

如果我只使用这个代码:

for(int t = 0; t < 5; t++){
    cout << pow(sections,5-t-1) << endl; 
}
Run Code Online (Sandbox Code Playgroud)

问题不再发生:

10000
1000
100
10
1
Run Code Online (Sandbox Code Playgroud)

有没有人给我解释?非常感谢你!

c++ mingw pow

11
推荐指数
2
解决办法
8344
查看次数

提高Rcpp浮点输出的精度

我试图在Rcpp函数的双精度输出中打印更多数字,但无法弄清楚如何...我看过如何使用cout以完全精度打印双值?通用C++答案的其他地方,但我看不出怎么做Rcpp,除了使用printf,我认为是最后的手段......

require(inline)
code <- '
    double x=1.0;
    std::cout.precision(10); // compiles but does nothing
    Rcpp::Rcout.precision(10); // compiles but does nothing
    printf("(1) %1.10lf\\n",x);  // works but bad practice
    Rcpp::Rcout << "(2) " << x << std::endl;
    Rcpp::Rcout << "(3) " << std::setprecision(10) << x << std::endl;
    return Rcpp::wrap(0);
'
fun <- rcpp(sig=c(v=0),body=code,includes="#include <iomanip>")
fun(1)
## (1) 1.0000000000
## (2) 1
## (3) 1
## [1] 0
Run Code Online (Sandbox Code Playgroud)

r rcpp

9
推荐指数
2
解决办法
899
查看次数