Перетворення рядка для плавання в C #


108

Я перетворюю рядок типу "41.00027357629127", і я використовую;

Convert.ToSingle("41.00027357629127");

або

float.Parse("41.00027357629127");

Ці методи повертають 4.10002732E + 15 .

Коли я конвертую в плаваючу, я хочу "41.00027357629127". Цей рядок має бути однаковим ...


1
Звідки ви знаєте, у що воно перетворене - саме так ви відображаєте число
мммммм

1
Будь-яка ідея, чому його ToSingle? А не ToFloat?
Лорд Дарт Вейдер

41.00027357629127 не повинно бути 4.10002732E + 15 у наукових позначеннях, якщо, звичайно, ваша культура не використовує десяткові коми через десятковий знак (і крапка як роздільник тисяч), тож число насправді буде читати: 4100027357629127, отже, відображатиметься як 4.10002732E + 15
ljgww

Відповіді:


229

Локал вашого потоку встановлено таким, у якому десятковий знак є "," замість ".".

Спробуйте скористатися цим:

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

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


35
не забудьте додати простір імен using System.Globalization;для доступуCultureInfo
Mobiletainment

24

По- перше, це просто уявлення про floatномер , який ви бачите в отладчике. Реальне значення приблизно точно (наскільки це можливо).

Примітка: Використовуйте завжди інформацію CultureInfo, коли маєте справу з числами з плаваючою комою та рядками.

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

Це лише приклад; виберіть відповідну культуру для вашого випадку.


як я можу вибрати культуруInfo? Я в Туреччині, де ı додасть TR-TR?
Мехмет

1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow

20

Ви можете використовувати наступне:

float asd = (float) Convert.ToDouble("41.00027357629127");

4
Укажіть, будь ласка, якийсь контекст, чому це правильна відповідь.
Bas Peeters


4

Точність поплавця - 7 цифр. Якщо ви хочете зберегти всю партію, вам потрібно використовувати подвійний тип, який зберігає 15-16 цифр. Щодо форматування, дивіться у публікації про форматування пар . І вам потрібно турбуватися про десяткові роздільники в C # .


я втомився вдвічі. Занадто повертається 4100027357629127.0 це дуже погано
Мехмет

2
Це звучить як "." символ не є десятковим роздільником у вашій мові? Перевірте stackoverflow.com/questions/3870154/c-sharp-decimal-separator
Jpe

0

Ти можеш double.Parse("41.00027357629127");


Я не думаю, що він запитує, як її округлити.
АБО Mapper

-2

Ви можете використовувати синтаксичний аналіз з подвійним, а не поплавком, щоб отримати більше значення точності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.