Niranjankr Ответов: 6

Запись длинных чисел в csv


Hey,

So I'm trying to write long numbers to a csv eg.

43564765876978
56576867897699
45765879789789

But these keep getting replaced with values such as 4.575769E+12, I'm assuming its because the csv is making the column a number column and its too big? 
How can I fix this? 
Note: it's get Ugly scientific notation format when digit number count greater then 12 number digit.

Many thanks.


Что я уже пробовал:

Я попытался преобразовать число в строку и сгенерировать csv, но все та же проблема.

Tomas Takac

Как вы пишете CSV - файл? Пожалуйста, обновите свой вопрос с помощью кода.

Maciej Los

Какое приложение вы используете для открытия csv или где вы отображаете данные?
Если вы используете MS Excel - да, вы увидите научный формат, но цифры правильные. Откройте csv-файл в блокноте, и вы увидите правильный числовой формат.

6 Ответов

Рейтинг:
50

Maciej Los

Я твердо верю в это Урош Шмон[^] прав в отношении этого утверждения: "Csv-это очень простой текстовый формат, который ничего не знает о его содержании". Вы не предоставили способ сохранения чисел в csv-файл, поэтому мы не можем помочь вам решить вашу проблему, потому что у нас нет доступа к вашему экрану или данным. Я протестировал приведенный ниже код, и он работает идеально, даже если Excel отображает числа в научном формате.

decimal[] numbers = {43564765876978, 56576867897699, 45765879789789};
string path = @"D:\text.csv";

string[] lines = numbers.Select(x=>x.ToString()).ToArray();

File.WriteAllLines(path, lines);

lines = File.ReadAllLines(path);
//result:
//43564765876978 
//56576867897699 
//45765879789789 


Niranjankr

Пожалуйста, откройте ваш текстовый файл.csv. проблема существует.

результат есть ::::

4.35648 E+13
5.65769 E+13
4.57659 E+13

Maciej Los

Нет, нет никакого иссуэ, когда вы будете использовать метод моего метода. Я понятия не имею, какой метод вы используете. Как я уже упоминал, когда вы открываете этот файл с помощью Excel, вы всегда будете видеть научный формат.

Niranjankr

- вы всегда будете видеть научный формат."

Если мы не хотим открывать в научном формате, то как это возможно.

CPallini

Мой 5.

Maciej Los

Спасибо тебе, Карло!

Рейтинг:
31

Uroš Šmon

Проблема не на стороне csv. Csv-это очень простой текстовый формат, который ничего не знает о своем содержании. Похоже, что вы записываете в него числа с плавающей запятой, используя формат по умолчанию. Используйте формат с нулевыми десятичными знаками при записи или преобразуйте числа в целое число


Niranjankr

Я посылаю строковое значение. это большая цифра(17). "15704984052700001"

это приложение на stringbuilder.

Uroš Šmon

csv не имеет типа столбца, все они являются строками. Проверьте, как csvhelper работает со столбцами и типами столбцов. Я никогда не использовал его, потому что csv так прост

Maciej Los

5ed!

CPallini

5.

Рейтинг:
27

Niranjankr

if we place a ' at the front of the number in the csv cell, excel will format it as text. 

But then you will have to parse out the ' if you plan to use it as a number. 

This is specific to Excel and may or may not work in other spreadsheet applications.


Note :: it is not a proper solution but we can use to show it and while read data from csv need to ignore it.


Maciej Los

Обратите внимание, что мы говорим о файле csv вместо Excel... Итак, ваше решение неверно.
Кстати: добавление ['] в начале номера меняет номер на текст. Вы уверены, что ОП хочет хранить текст вместо цифр?

Niranjankr

Примечание :: это не правильное решение, но мы можем использовать, чтобы показать его, и при чтении данных из csv нужно игнорировать его.

Niranjankr

Да, конечно.

Рейтинг:
0

Patrice T

Цитата:
Но они продолжают заменяться такими значениями, как 4.575769 E+12

Это не проблема, связанная с csv, если вы выведете данные на экран, то увидите точно такие же значения.
Виновата именно программа, которая пишет в csv.
Это может быть форматирование при выводе чисел или тип данных, в котором хранятся данные.
Но пока мы не видим ваш код, трудно сказать.


CHill60

Более вероятно, что ОП использует Excel для просмотра файла! :-)

Patrice T

Возможно, но я ничего не вижу в Excel.

CHill60

Это то, что я вижу здесь ежедневно - пользователи жалуются, что цифры "стали странными", потому что они настаивают на открытии CSV - файлов с помощью Excel, который автоматически меняет цифры на научную нотацию

Рейтинг:
0

ProgrammingExplorer

Проблема должна иметь тип данных.
Вы должны преобразовать тип данных double в string, который преобразует число в экспоненциальную форму.
напр.

double val = 43564765876978;
string s = val.ToString();

вместо вышеприведенного используйте улонг в качестве следующего, и все будет в порядке.
ulong val = 43564765876978;
string s = val.ToString();


Maciej Los

Я бы посоветовал прочитать вопрос еще раз. Ваш ответ не связан с вопросом. Кстати: преобразование чисел в строку и наоборот-очень плохая идея.

Рейтинг:
0

Member 14978422

Вы можете просто добавить "\t" в конце номера. Это добавит пробел после и перестанет преобразовывать его в научную нотацию.

Напр.:

let number = 123456789 + "\t";


CHill60

Что такое let?
Число не преобразуется ни во что, ОП явно открывал CSV с помощью Excel и дисплей ценность заключалась в научной нотации.
Содержимое CSV-это все строки.
И это решение все равно не работает - попробуйте сохранить 12345678934567 , 12345678934567 в файл .csv и открыть его в Excel