Вопрос по string, type-conversion, c#, floating-point, .net – Преобразование строки в плавающее в C #

81

Я преобразую строку типа «41.00027357629127» и использую;

Convert.ToSingle("41.00027357629127");

или же

float.Parse("41.00027357629127");

Эти методы возвращают4.10002732E+15.

Когда я конвертирую в плавающий файл, я хочу "41.00027357629127". Эта строка должна быть такой же ...

Любая идея, почему его ToSingle? А не ToFloat? R2D2
Как вы узнаете, во что он конвертируется - как вы отображаете число? Mark
41.00027357629127 не должен быть 4.10002732E + 15 в научной нотации, если, конечно, ваша культура не использует десятичную запятую вместо десятичной запятой (и точка в качестве разделителя тысяч), так что число фактически будет иметь вид: 4100027357629127, следовательно, будет отображаться как 4.10002732E + 15 ljgww

Ваш Ответ

7   ответов
186

Языковой стандарт вашего потока установлен на такой, в котором десятичный знак равен "," вместо "."

Попробуйте использовать это:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

Однако обратите внимание, что число с плавающей точкой не может содержать столько цифр точности. Вы должны использовать двойной или десятичный для этого.

не забудьте добавить пространство именusing System.Globalization; чтобы получить доступCultureInfo
0

Вы можете использовать синтаксический анализ с двойным вместо float, чтобы получить более точное значение.

21

Во-первых, это простоpresentation изfloat номер, который вы видите в отладчике.real значение является приблизительно точным (насколько это возможно).

Примечание: использоватьalways CultureInfo информация при работе с числами с плавающей запятой по сравнению со строками.

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

Это всего лишь пример; выберите подходящую культуру для вашего случая.

как можно & # x131; выбрать мой CultureInfo? Я в Турции, где & # x131; добавит TR-TR? Mehmet
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
10

Вы можете использовать следующее:

float asd = (float) Convert.ToDouble("41.00027357629127");
Пожалуйста, предоставьте некоторый контекст относительно того, почему это правильный ответ.
4

Точностьпоплавок 7 цифр. Если вы хотите сохранить всю партию, вам нужно использоватьдвойной тип, который хранит 15-16 цифр. Что касается форматирования, посмотрите на пост оформатирование удваивается, И тебе нужно беспокоитьсяо десятичных разделителях в C #.<,/p>

& # X131; устал дважды. редкий возвращает 4100027357629127.0 это очень плохо Mehmet
Это звучит как "." символ не является десятичным разделителем в вашей локали? Проверять, выписыватьсяstackoverflow.com/questions/3870154/c-sharp-decimal-separator
1

Вы можетеdouble.Parse("41.00027357629127");

& # X131; устал, но & # x131; техника его подводит Mehmet
Я не думаю, что он спрашивает, как его округлить.
7

использованиеConvert.ToDouble("41.00027357629127");

Convert.ToDouble documentation

Разве это не меняет тип данных с плавающего на двойной? ОП хотел поплавок.

Похожие вопросы