- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从数组中取出长 double 值。
long double num;
char * pEnd;
char line[] = {5,0,2,5,2,2,5,4,5,.,5,6,6};
num = strtold(line1, &pEnd);
出于某种原因,我得到的数字四舍五入为 502522545.6我对 C++ 很陌生,所以我做错了什么吗?需要做什么才能得到 num 中的整数而不是四舍五入?
谢谢你的帮助!!!
抱歉,这是我的第一篇文章 =)
所以整个程序代码如下:
class Number
{
private:
long double num ;
char line[19], line2[19];
int i, k;
public:
Number()
{}
void getData()
{
i = 0;
char ch= 'a';
cout << "\nPlease provide me with the number: ";
while ((ch = _getche()) != '\r')
{
line[i] = ch;
line2[i] = ch;
i++;
}
}
void printData() const
{
cout << endl;
cout << "Printing like an Array: ";
for (int j = 0; j < i; j++)
{
cout << line[j];
}
cout << "\nModified Array is: ";
for (int j = 0; j < (i-k); j++)
{
cout << line2[j];
}
cout << "\nTHe long Double is: " << num;
}
void getLong()
{
char * pEnd;
k = 1;
for (int j = 0; j < i; j++)
{
if (line2[j+k] == ',')
{
k++;
line2[j] = line2[j + k];
}
line2[j] = line2[j + k];
}
line2[i -k] = line2[19];
num = strtold(line2, &pEnd);
}
};
int main()
{
Number num;
char ch = 'a';
while (ch != 'n')
{
num.getData();
num.getLong();
num.printData();
cout << "\nWould you like to enter another number ? (y/n)";
cin >> ch;
}
return 0;
}
想法是输入的数字采用以下格式($50,555,355.67)或任何其他数字。然后程序会删除除数字和“.”之外的所有符号。然后我试图从数组中取出 long double num。如果您运行该程序,您总是会从 num 中得到四舍五入的数字。
最佳答案
C++ 的实现方式非常简单:
#include <sstream>
#include <iostream>
#include <iomanip>
int main() {
const std::string line = "502522545.566";
long double num;
std::istringstream s(line);
s >> num;
std::cout << std::fixed << std::setprecision(1) << num << std::endl;
}
关于c++ - 在 C++ 中使用 strtol 获取 long double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906616/
我编写了以下词法分析器。它适用于以下输入:c&3&f、(3|6)&c、f^1。然而,我得到的 strtol 结果并不一致。当我运行 #include #include //Max number
我正在使用 strtol 从字符串中解析整数。我打算使用 strtol 的第二个参数来确定整个字符串是否被解析为数字。我有这样的代码(字符串永远不会代表 token; const size_t tok
strtol 规范在概念上将输入字符串分为“初始空白”、“主题序列”和“最终字符串”,并将“主题序列”定义为: the longest initial subsequence of the input
我只是好奇这个。 strtol 不需要您指定要处理的字节数,因此理论上它可能会被提供一个包含无穷无尽的数字序列的字符串以供使用,从而导致拒绝服务攻击。当然,一旦意识到 long 的精度已经用尽(实际上
关闭。这个问题需要 details or clarity 。目前不接受答案。 想要改进这个问题?通过 editing this post 添加详细信息并澄清问题。 已关闭 5 年前。 奥 git _a
这周我刚刚开始学习c。 我正在尝试将单个字符转换为 long/int。 我的问题是,当我通过 main 调用 convenrtCharToInt 时,它返回正确的值,但是当我通过另一个函数调用此函数,
我有这段代码,应该可以正常运行,但由于某种原因,当我在循环的条件检查之前释放字符串时,循环会循环。摆脱循环的唯一方法是给出超过 3 位的整数(输入 > 99 || 输入 #include #inc
当我使用 strtol() 函数时,当我尝试转换时: 2015-08-12 我希望它转换失败而不是仅转换 2015? int main(int argc, char *argv[]) { p
使用指针: char a[]=" 0xa this is a343 good"; char* *endptr=NULL; long int b=0; b=strtol(a,endptr,0); b=s
您好,我制作了一个测试程序,以便在我对以下代码使用 valgrind --track-origins=yes -v ./a.out 时获得如何解决问题的帮助它返回以下错误; ==13192== 1 e
有人可以帮助我理解为什么我看到相同输入的不同输出吗? “n”的输出是 2147483647,这是不正确的。为什么? --------输出------------ FF FF FF FF FFFFFF
strtol 的第二个参数是如何工作的? 这是我尝试过的: strtol(str, &ptr, 10) 其中 ptr 是一个 char * 而 str 是一个字符串。现在,如果我将 str 作为 '3
所以我有两个十六进制字符串 - "3b101c091d53320c000910" 和 "071d154502010a04000419"。当我对它们使用 strtol() 时,我得到两个字符串的相同值。
我正在尝试使用以下代码使用 strtol 将字符数组转换为整数: int foo = strtol(temp, (char **)NULL, 0); 其中温度 = 4000000010 但是 strt
这个问题在这里已经有了答案: strtol using errno (5 个答案) 关闭 8 年前。 基本上使用 strtol 来检查不成功的转换,我正在使用函数 width = (int) st
我真的很困惑。我必须遗漏一些相当简单的东西,但我读到的关于 strtol() 的内容没有任何意义。有人可以用一种非常基本的方式为我阐明它,并举例说明我如何使类似以下的东西起作用吗? string in
根据 C11 (n1570) 中的 § 7.22.1.4,必须声明 strtol: #include long int strtol (const char *restrict nptr,
此代码似乎按预期工作,使用单个指针填充数字数组 #include #include #include int main(void) { int arr[4], count = 0, i;
我这里有一个奇怪的。当我传入以下字符串时,strtol、atol 和 atoi 都返回不正确的值: long test = strtol("3087663490", &p, 10); 根据我的调试器,
我正在围绕 strtol() 创建一个包装函数对于 int16_t ,我遇到了一个问题:如何处理 0x 这样的输入?也就是说,它作为数字有效吗 0 , 后跟非数字 x , 或者它是无效的因为后面没有任
我是一名优秀的程序员,十分优秀!