десятичное в длинное - всегда отсутствует разделитель точек - PullRequest
1 голос
/ 09 декабря 2011

Я хочу иметь возможность конвертировать

varchar > decimal > long

когда dbreader[11] содержит 3319419,13 как varchar

Например:

decimal d = Convert.ToDecimal(dbreader[11], CultureInfo.InvariantCulture);

Я получаю

d = 3319419.13M

Когда я преобразую это в длинный объект, я получаю

long i = 3319419

Я хочу закончить с 3319419,1

Ответы [ 5 ]

3 голосов
/ 09 декабря 2011

Боюсь, никогда не будет. long является синонимом System.Int64 - 64-разрядного целочисленного значения, поэтому он не может сохранить точность, к которой вы его запрашиваете. Смотри здесь

2 голосов
/ 09 декабря 2011

Вы не можете получить 3319419,1 в long, потому что long является целым числом.Попробуйте вместо этого использовать double.

РЕДАКТИРОВАТЬ: Теперь double оказывается числом с плавающей точкой.Это означает, что количество десятичных цифр, которые этот тип может представлять, является не фиксированным, а переменным.Итак, если вы хотите увидеть определенное количество десятичных цифр, то это полностью вопрос отображения.Итак, чтобы увидеть вашу двойную переменную только с одной цифрой, преобразуйте ее в строку следующим образом: String.Format( "{0:00.0}", my_double_variable );

0 голосов
/ 09 декабря 2011

A long не имеет десятичных дробей. Это целочисленный тип.

Возможно, вы захотите использовать double или оставить его как decimal.

0 голосов
/ 09 декабря 2011

Проверка реальности.

3319419,1

Длинный неспособен хранить частичные числа. 1, 2, 3 - не 1, 1.1, 1.2. Это определение длинного.

ТАК, вы НЕ МОЖЕТЕ хранить дробные значения в long независимо от того, что вы хотите. Хотите сохранить дробные значения - используйте тип данных, который может.

0 голосов
/ 09 декабря 2011

Long - 8-байтовое целое число (целое число). Если вам требуется больше точности, используйте двойное (8-байтовое десятичное число)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...