10 진수 과학 표기법 float / double을 일반 문자열로 변환하는 방법

데니스 웡

숫자가 그다지 크지 않을 때이 문제를 해결하는 많은 질문이 있다는 것을 알고 있지만, 큰 숫자 (여전히 float / double 범위에 있음)의 경우 출력이 정밀도를 잃을 것입니다.

#include <stdio.h>
#include <iostream>
#include <sstream>

int main() {
    double d = -1e307, d2 = 1e307;
    std::cout << std::fixed << d << std::endl;

    printf("d2 is %lf\n", d2);
    return 0;
}

이 코드는 다음과 같은 출력을 얻습니다.

-9999999999999999860310597602564577717002641838126363875249660735883565852672743849064846414228960666786379280392654615393353172850252103336275952370615397010730691664689375178569039851073146339641623266071126720011020169553304018596457812688561947201171488461172921822139066929851282122002676667750021070848.000000

d2 is 9999999999999999860310597602564577717002641838126363875249660735883565852672743849064846414228960666786379280392654615393353172850252103336275952370615397010730691664689375178569039851073146339641623266071126720011020169553304018596457812688561947201171488461172921822139066929851282122002676667750021070848.000000

그러나 이것은 분명히 정확하지 않습니다! 진짜 변환하는 방법?!

데니스 웡

실제로 나는 이것을 내 자신을 처리했으며, 여기에 내 코드가 있으며, 함수는 임의의 부동 문자열을 일반 문자열로 변환합니다.

질문에서 영감을 얻은이 함수 .

// DW: remove e
std::string trim_real(std::string str) {
    // DW: all to lowercase
    std::transform(str.begin(), str.end(), str.begin(), ::tolower);

    // DW: find "e" and "."
    size_t pe = str.find_first_of("e");
    std::string se = str.substr(pe + 1, str.size() - (pe + 1));
    int de = std::stoi(se);

    // DW: get string without "e"
    std::string sc = str.substr(0, pe);
    std::cout << "sc is " << sc << std::endl;

    // DW: remove uneccessary 0
    size_t pf0 = sc.find_first_not_of("0");
    size_t pl0 = sc.find_last_not_of("0");
    std::string sc_trim = sc.substr(pf0, pl0 - pf0 + 1);
    std::cout << "sc_trim is " << sc_trim << std::endl;

    // DW: move "." according to e
    size_t pp = sc_trim.find_first_of(".");
    if (pp == std::string::npos) {
        // DW: this means there is no "."
        pp = 0;
    }
    int pp_tobe = pp + de;

    sc_trim.erase(pp, 1);
    if (de > 0) {
        // DW: should move "." to the right
        if (pp_tobe < sc_trim.size()) {
            sc_trim.insert(pp_tobe, ".");
        } else {
            sc_trim += std::string(pp_tobe - sc_trim.size() + 1, '0');
            sc_trim += ".0";
        }
    } else {
        // DW: should move "." to the left
        if (pp_tobe >= 0) {
            sc_trim.insert(pp_tobe, ".");
        } else {
            sc_trim = "." + std::string(0 - pp_tobe, '0') + sc_trim;
        }
    }

    if (sc_trim == ".") {
        // DW: this means sc_trim is actually 0 now
        sc_trim = "0.0";
    }
    return sc_trim;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Bash를 사용하여 과학적 표기법을 10 진수로 변환

분류에서Dev

과학적 표기법을 사람이 읽을 수있는 float로 변환

분류에서Dev

표시 형식을 변환하는 방법 (과학 표기법을 Double로)

분류에서Dev

과학적 표기법을 csv에서 십진수로 변환

분류에서Dev

bash / perl에서 과학적 표기법을 정수가 아닌 10 진수로 변환

분류에서Dev

Java에서 문자열을 10 진수로 변환하는 방법

분류에서Dev

과학적 표기법에서 10 진수 1로 형식 문자열

분류에서Dev

C ++에서 과학적 표기법없이 문자열을 double로 변환

분류에서Dev

과학적 표기법없이 long double을 문자열로 변환 (Dart)

분류에서Dev

과학적 표기법을 전체 숫자로 문자열로 변환하는 방법 Laravel

분류에서Dev

SQL Server 과학적 표기법 (지수 표기법) 문자열을 숫자로 변환

분류에서Dev

과학적 표기법의 float를 "d.dd x 10 ^ (-n)"으로 변환

분류에서Dev

float64 numpy 배열을 과학적 표기법이 아닌 부동 소수점으로 변환

분류에서Dev

과학적 표기법으로 부동 소수점 배열을 문자열 배열로 변환

분류에서Dev

xsd : double 문자열을 한 번에 십진수로 변환하는 방법

분류에서Dev

SQL-데이터 유형 float를 nvarchar로 변경하고 과학적 표기법을 제거하는 방법

분류에서Dev

숫자로 변환하는 과학적 표기법 문자열의 txt 파일 읽기

분류에서Dev

문자열의 지수 값을 지수 표기법없이 10 진수 표현으로 변환

분류에서Dev

주어진 HTML 문자열을 일반 문자열 Android로 변환하는 방법은 무엇입니까?

분류에서Dev

주어진 HTML 문자열을 일반 문자열 Android로 변환하는 방법은 무엇입니까?

분류에서Dev

C # 지수 표기법을 사용하여 double을 문자열로 변환하는 방법

분류에서Dev

Pandas 열을 과학적 표기법없이 문자열로 변환

분류에서Dev

배열의 문자열 표현을 일반 배열로 변환하는 방법

분류에서Dev

과학 표기법의 문자열을 XPath의 숫자 형식으로 변환

분류에서Dev

PYTHON 문자열을 int 또는 float로 변환하는 방법

분류에서Dev

문자열을 일반 유형으로 변환하는 방법

분류에서Dev

팬더는 big int를 문자열로 변환하여 과학적 표기법을 피합니다.

분류에서Dev

ssis에서 문자열을 float로 변환하는 방법

분류에서Dev

C # 십진수와 천을 사용하여 double을 문자열로 변환하는 방법

Related 관련 기사

  1. 1

    Bash를 사용하여 과학적 표기법을 10 진수로 변환

  2. 2

    과학적 표기법을 사람이 읽을 수있는 float로 변환

  3. 3

    표시 형식을 변환하는 방법 (과학 표기법을 Double로)

  4. 4

    과학적 표기법을 csv에서 십진수로 변환

  5. 5

    bash / perl에서 과학적 표기법을 정수가 아닌 10 진수로 변환

  6. 6

    Java에서 문자열을 10 진수로 변환하는 방법

  7. 7

    과학적 표기법에서 10 진수 1로 형식 문자열

  8. 8

    C ++에서 과학적 표기법없이 문자열을 double로 변환

  9. 9

    과학적 표기법없이 long double을 문자열로 변환 (Dart)

  10. 10

    과학적 표기법을 전체 숫자로 문자열로 변환하는 방법 Laravel

  11. 11

    SQL Server 과학적 표기법 (지수 표기법) 문자열을 숫자로 변환

  12. 12

    과학적 표기법의 float를 "d.dd x 10 ^ (-n)"으로 변환

  13. 13

    float64 numpy 배열을 과학적 표기법이 아닌 부동 소수점으로 변환

  14. 14

    과학적 표기법으로 부동 소수점 배열을 문자열 배열로 변환

  15. 15

    xsd : double 문자열을 한 번에 십진수로 변환하는 방법

  16. 16

    SQL-데이터 유형 float를 nvarchar로 변경하고 과학적 표기법을 제거하는 방법

  17. 17

    숫자로 변환하는 과학적 표기법 문자열의 txt 파일 읽기

  18. 18

    문자열의 지수 값을 지수 표기법없이 10 진수 표현으로 변환

  19. 19

    주어진 HTML 문자열을 일반 문자열 Android로 변환하는 방법은 무엇입니까?

  20. 20

    주어진 HTML 문자열을 일반 문자열 Android로 변환하는 방법은 무엇입니까?

  21. 21

    C # 지수 표기법을 사용하여 double을 문자열로 변환하는 방법

  22. 22

    Pandas 열을 과학적 표기법없이 문자열로 변환

  23. 23

    배열의 문자열 표현을 일반 배열로 변환하는 방법

  24. 24

    과학 표기법의 문자열을 XPath의 숫자 형식으로 변환

  25. 25

    PYTHON 문자열을 int 또는 float로 변환하는 방법

  26. 26

    문자열을 일반 유형으로 변환하는 방법

  27. 27

    팬더는 big int를 문자열로 변환하여 과학적 표기법을 피합니다.

  28. 28

    ssis에서 문자열을 float로 변환하는 방법

  29. 29

    C # 십진수와 천을 사용하여 double을 문자열로 변환하는 방법

뜨겁다태그

보관