Почему эти уравнения подразделения приводят к нулю?

Я использовал MVC для того, так как Предварительный просмотр 3 вышел и в то время как это, все еще имеет, это - болезнь роста, это помогает вполне немного в области разработки команды. Попытайтесь иметь три работы человек на единственной странице веб-форм, и затем Вы поймете понятие стука по Вашей голове на стене. Я могу работать с разработчиком, который понимает элементы дизайна на странице представления и нашем резидентном боге Linq в создании образцовой работы, в то время как я соединил все в контроллере. Я никогда не был в состоянии разработать в области, где разделения проблем было настолько легко достигнуть.

Самый большой коммерческий аргумент ASP.NET MVC - StackOverflow работает на стеке MVC.

, Что, будучи сказанным... Ваш код настолько более симпатичен, чем, что я обычно делаю со страницей представления. Кроме того, один из парней, с которыми я работаю, работает над обертыванием помощника HTML в библиотеку тегов. Вместо < % =Html. RandomFunctionHere () %> это работает как

< hh:randomfunction/>

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

9
задан Edward Tanguay 30 July 2009 в 11:22
поделиться

9 ответов

Вы используете int / int, который делает все в целочисленной арифметике, даже если вы присваиваете переменную decimal / double / float.

Заставить один из операндов иметь тип, который вы хотите использовать для арифметики.

for (int i = 0; i <= 100; i++)
{
    decimal result = i / 100m;
    long result2 = i / 100;
    double result3 = i / 100d;
    float result4 = i / 100f;
    Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})", 
                      i, 100, i / 100d, result, result2, result3, result4);
}

Результаты:

0/100=0 (0,0,0, 0)
1/100=0.01 (0.01,0,0.01, 0.01)
2/100=0.02 (0.02,0,0.02, 0.02)
3/100=0.03 (0.03,0,0.03, 0.03)
4/100=0.04 (0.04,0,0.04, 0.04)
5/100=0.05 (0.05,0,0.05, 0.05)

(и т.д.)

Обратите внимание, что не показывает точное значение, представленное числом с плавающей запятой или двойным числом - вы не может представлять 0,01 в точности как, например, float или double. Форматирование строки эффективно округляет результат. См. Мою статью о двоичной плавающей запятой .NET для получения дополнительной информации, а также класс, который позволит вам увидеть точное значение типа double.

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

30
ответ дан 4 December 2019 в 06:02
поделиться

Попробуйте

i / 100.0
11
ответ дан 4 December 2019 в 06:02
поделиться

Поскольку i является целым числом, а 100 - целым числом ... поэтому у вас есть целочисленное деление

Попробуйте вместо этого (десятичное) i / 100.0

2
ответ дан 4 December 2019 в 06:02
поделиться

, потому что i является int : i / 100 ] выполняет целочисленное деление, затем результат, который всегда равен 0, приводится к целевому типу. В выражении необходимо указать хотя бы один литерал, не являющийся int:

i / 100.0 
5
ответ дан 4 December 2019 в 06:02
поделиться

Независимо от того, где вы его храните, целое число, разделенное на целое, всегда будет целым числом.

1
ответ дан 4 December 2019 в 06:02
поделиться
double result3 = ((double)i) / 100;
0
ответ дан 4 December 2019 в 06:02
поделиться

Вам нужно принудительно выполнить операцию с плавающей запятой "double / double" вместо "int / int"

double result = (double)297 / (double)315 ;
1
ответ дан 4 December 2019 в 06:02
поделиться

это целочисленное деление независимо от типа переменной, в которой вы храните, поэтому int / int = int

0
ответ дан 4 December 2019 в 06:02
поделиться

Поскольку i является значением int , и вы делите его на целое число, поэтому результат будет целым! и поэтому вам нужно разделить на 100,0 , чтобы иметь неявное приведение в float, или укажите 100f или 100d

0
ответ дан 4 December 2019 в 06:02
поделиться
Другие вопросы по тегам:

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