Преобразовать. ToDouble (“4089.90”) выводы 40.899,00, почему?

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

Например, я использую

Convert.ToDouble("4089.90"); // it outputs 40.899,00

Странная причина в моем компьютере, это работает хорошо, но на ПК клиента (с той же культурой в региональных настройках) показывает мне последний вывод. Я знаю, что могу зафиксировать его использование

Convert.ToDouble("4089.90", System.Globalization.CultureInfo.InvariantCulture);

Но существует много кода в использовании программы, "Преобразовывают. ToDouble" и я не хотел бы изменять все это, с другой стороны, я хочу понять, почему это происходит.

10
задан ROMANIA_engineer 4 September 2019 в 12:18
поделиться

6 ответов

Вы можете установить культуру для своей темы с:

Thread.CurrentThread.CurrentCulture = 
       System.Globalization.CultureInfo.InvariantCulture;
14
ответ дан 3 December 2019 в 21:21
поделиться

Это ваш компьютер, который не дает правильный ответ, а не их. Ваша культура заявляет, что «4089,90» такое же, как 4089900, поскольку точка (.) Используется для разделения тысяч (и, таким образом, должно быть три числа после точки).

Похоже, вы хотите использовать точку в качестве десятично-разделителя, вопреки вашим настройкам культуры; Итак, вы имеют в использовании System.Globalization.CultureInfo.invariantCulture в вашей программе. Извини.

0
ответ дан 3 December 2019 в 21:21
поделиться

Я не знаю ни C # ни ASP.NET, но Я думаю, что проблема в том, что вы выполняете операцию в культуре, где точка . - это тысячи сепаратор, а не десятичный разделитель. Очень вывод вы цитате, является доказательством: 40,899,00 .

Какая культура / локаль вы работаете?

1
ответ дан 3 December 2019 в 21:21
поделиться

java.sql.ResultSet является интерфейсом, поэтому можно создать собственный класс, реализующий этот интерфейс.

-121--1390552-

A Func < T, T1, T2 > является делегатом. Делегат - это тип, представляющий одну функцию. В C # можно использовать подобные функции вместо объявления определенного интерфейса. Если бы вы хотели, вы могли бы использовать интерфейс, который бы выглядел примерно так:

interface IStrategy
{
     T Compute<T1, T2>();
}
-121--3909889-

На самом деле очень редко такое поведение, потому что все машины имеют одинаковые настройки культуры, однако я думаю, что лучшим решением было бы изменить web.config так:

configuration>
  <system.web>
    <globalization culture = "es-HN" />
  </system.web>
</configuration

И применить настройки для всего приложения.

Спасибо всем за вашу помощь.

0
ответ дан 3 December 2019 в 21:21
поделиться

Культура может быть основана на том, где приложение ASP.NET работает, а не клиентский ПК, который запущен браузер. Хотя их настольный компьютер может иметь подобные настройки культуры, сервер может отличаться.

0
ответ дан 3 December 2019 в 21:21
поделиться

Вы не говорите, где вы находитесь, но вывод согласуется с нынешней культурой, являющейся тем, что имеет «». как тысячи разделитель и десятичная запятая, а не десятичная точка.

Однако вы утверждаете, что культура такая же - что это противоречит этому. У вас или клиент изменились (или настроены) «Стандарты и форматы» на региональных и языковых вариантах? Если настройка была настроена, она все равно будет читаться как «английский (Великобритания)» (или где-либо), но приведет к разным результатам по умолчанию.

2
ответ дан 3 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

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