Вам нужно добавить заголовки, чтобы запрос работал. Я протестировал его, и достаточно добавить только User-Agent:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0'
}
data = {
'ctl00$ContentPlaceHolder1$scrpMan': 'ctl00$ContentPlaceHolder1$UpdatePanel9013|ctl00$ContentPlaceHolder1$btnSearch',
'__EVENTTARGET': '',
'__EVENTARGUMENT': '',
'__VIEWSTATE': '/wEPDwUKMTMzMzg0OTIwNQ9kFgJmD2QWBAIFDxYCHgVzdHlsZQUtYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vYXNzZXRzL2ltZy9sb2dvLnBuZyk7ZAIHD2QWAgIBD2QWAgIBD2QWAmYPZBYKAgcPEA8WBh4NRGF0YVRleHRGaWVsZAUIQ2F0Z05hbWUeDkRhdGFWYWx1ZUZpZWxkBQhjYXRnY29kZR4LXyFEYXRhQm91bmRnZBAVBA9TZWxlY3QgQ2F0ZWdvcnkHRkxPV0VSUwZGUlVJVFMKVkVHRVRBQkxFUxUEATABNAExATIUKwMEZ2dnZ2RkAg0PEA8WBh8BBQpDZW50cmVOYW1lHwIFDENlbnRyZU51bWJlch8DZ2QQFR4JQUhNRURBQkFECEFNUklUU0FSBkJBUkFVVAlCZW5nYWx1cnUGQkhPUEFMDEJIVUJBTkVTSFdBUgpDSEFORElHQVJIB0NIRU5OQUkIREVIUkFEVU4FREVMSEkIR0FOR0FUT0sIR1VXQUhBVEkJSFlERVJBQkFEBkpBSVBVUgVKQU1NVQdLT0xLQVRBCUxBU0FMR0FPTgdMVUNLTk9XBk1VTUJBSQZOQUdQVVIGTkFTSElLBVBBVE5BClBJTVBBTEdBT04EUFVORQZSQUlQVVIGUkFOQ0hJBlNISU1MQQhTUklOQUdBUgpUUklWRU5EUlVNCFZBUkFOQVNJFR4BMQIzMgIzNgEyATMBNAE3AjE1AjM0ATgBOQIxMAIxMQIxMgIyMgE2AjM5AjE0ATUCMTYCMjMCMTcCNDACMjQCMzUCMjgCMTgCMTkCMjACNDEUKwMeZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZGQCFw8PZBYCHgdvbmNsaWNrBTVzZWxlY3RBbGxDZW50ZXIoJ1N5c3RlbS5XZWIuVUkuV2ViQ29udHJvbHMuTGlzdEJveCcpO2QCGQ8PZBYCHwQFNVJlbW92ZUFsbENlbnRlcignU3lzdGVtLldlYi5VSS5XZWJDb250cm9scy5MaXN0Qm94Jyk7ZAIjDw8WAh4HVmlzaWJsZWhkZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyMSRMc2JveENlbnRlckxpc3QVB5GC6UfPXNBmxBLvA2devnEGKA==',
'__VIEWSTATEGENERATOR': 'DBC76A8E',
'ctl00$ContentPlaceHolder1$drpCategoryName': '4',
'ctl00$ContentPlaceHolder1$LsboxCenterList': '1',
'ctl00$ContentPlaceHolder1$txtdate': '10/01/2019',
'__ASYNCPOST': 'true',
'ctl00$ContentPlaceHolder1$btnSearch': 'Search'
}
response = requests.post('http://nhb.gov.in/OnlineClient/categorywiseallvarietyreport.aspx?&menu.Menu=11', data=data, headers=headers)
print(response.text)
Сначала важно знать, что числа с плавающей точкой приближены. См. ссылку, предоставленную @Greg Hewgill для понимания, почему эта проблема не полностью разрешима.
Но вот несколько решений проблемы, которая, вероятно, удовлетворит Ваши потребности:
Вероятно, лучший метод, но менее эффективный:
char sz[64];
double lf = 0.600000002;
sprintf(sz, "%.4lf\n", lf); //sz contains 0.6000
double lf2 = atof(sz);
//lf == 0.600000002;
//lf2 == 0.6000
printf("%.4lf", lf2); //print 0.6000
Более эффективный путь, но вероятно менее точный:
double lf = 0.600000002;
int iSigned = lf > 0? 1: -1;
unsigned int uiTemp = (lf*pow(10, 4)) * iSigned; //Note I'm using unsigned int so that I can increase the precision of the truncate
lf = (((double)uiTemp)/pow(10,4) * iSigned);
Хорошая ссылка для того, почему это происходит, может быть найдена в том, Что Каждый Программист Должен Знать Об Арифметике С плавающей точкой David Goldberg.
Реалистично это не возможно. Это не ограничение C++, но просто способ, которым работает плавающая точка. Для многих значений нет никаких точных представлений, таким образом, Вы не можете просто усечь ко многим цифрам.
Вы могли усечь при печати использующий printf строки формата.
Если действительно необходимо смочь сохранить только ограниченное количество цифр, я предлагаю, чтобы Вы использовали тип данных фиксированной точности вместо этого.
я думаю вопрос, который нужно задать, вот: Почему Вам нужен он усеченный?
Если для сравнения между значениями, возможно, необходимо рассмотреть использование теста эпсилона. (с дополнительным значением допуска, в Вашем случае, так как это, кажется, намного больше, чем общепринятый эпсилон).
Если Вы просто желаете распечатать его как 0,6000, используйте других методов, предложили.
roundf(myfloat * powf(10, numDigits)) / powf(10, numDigits);
Например, в Вашем случае Вы усекаете три цифры (numDigits). Вы использовали бы:
roundf(0.6000002 * 1000) / 1000
// And thus:
roundf(600.0002) / 1000
600 / 1000
0.6
(Вы, вероятно, сохранили бы результат powf где-нибудь, так как Вы используете его дважды.)
Из-за того, как плавания обычно хранятся на компьютерах, вероятно, были бы погрешности. Это - то, что Вы получаете для использования плаваний, все же.