【问题标题】:How do I extract the integers of a number stored in float in exponential format?如何提取以指数格式存储在浮点数中的数字的整数?
【发布时间】:2021-11-17 08:05:40
【问题描述】:

例如:

如果我有一个号码另存为

float f = 1.23005979e-41;

我想得到它的组成部分,比如

1 和 23005979

【问题讨论】:

  • 用sprintf转换成字符串,然后解析得到的字符串,可能使用strtol。 3-4行代码。
  • 您需要更具体地说明“数字的整数”的含义,因为数字可能不是很精确。它们可能会被截断。在这个例子中,整数1 和23005979 部分与浮点数关系不大。没有指数,这些数字毫无意义。
  • 您的问题的答案是“您不知道”。一旦分配到f,您就会丢失一些原始数字。我意识到您非常聪明地选择了一个实际上可以存储为float 的次正规数,并且仍然保留了小数点后正确的 8 位数字。但这一般不会发生。
  • 您实际上想要达到什么目的?这看起来像 XY Problem
  • 像这样获取浮点数的“整数部分”几乎从来都不是一件合适的事情。解释这样做的目的是什么,以便人们可以让你走上正轨。

标签: c precision


【解决方案1】:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_LENGTH 100

int main(){
    double f = 1.23005979e-41;
    char str[MAX_LENGTH];
    sprintf(str,"%g",f);
    char * part1 = strtok(str,".");
    char * part2 = strtok(NULL,".");
    printf("First part: %s\nSecond part: %s\n",part1,part2);
    char * e = strchr(part2,'e');
    *e = '\0';
    int p1 = (int) atof(part1);
    int p2 = (int) atof(part2);
    printf("First part: %d\nSecond part: %d\n",p1,p2);
    return 0;
}

【讨论】:

  • 将"." 用作第二个标记的分隔符,然后将strchr 用作"e" 的分隔符是没有意义的。
  • @Cheatah 我简单地回答了这个问题!考虑到给定的数字 1.23005979e-41。
  • 我没说你没有。奇怪的是你不会在第二部分使用strtok(NULL, "e")。
  • @Cheatah 我喜欢你?!
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多