Opened 11 years ago
Closed 11 years ago
#878 closed defect (fixed)
Regression: Common Expression Engine cannot understand scientific notation when the coefficient is a decimal
Reported by: | christinebao | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | 3.8.0 |
Component: | FDO API | Version: | 3.8.0 |
Severity: | 3 | Keywords: | |
Cc: | External ID: | DE6337 |
Description
Reported by Autodesk QA:
Steps:
- Install Deutsch Map3D L014AK
- Create an SHP FDO connection to connect the attached file region.shp
- Add to Map with Query
Area( Geometry ) > 1.5e+11
Result:
All the 34 features(check it in data table) are added to map, the filter doesn't work.
It works fine if the query are:
Area( Geometry ) > 2e+11 Area( Geometry ) > 150000000000
Attachments (1)
Note:
See TracTickets
for help on using tickets.
In German version, the filter like “Area2D(geometry) > 1.5e+11” doesn’t work.
The reason is that, in FdoLex::getnumber, it always set ‘.’ as the decimal point. And later, it invokes _wtof to convert the string to double value. Actually, _wtof internally invokes _wtof_l with a null locale, and _wtof_l will use the current or default locale to convert the string if the input locale is null. In English locale, the decimal point is ‘.’, but in German or some other locales, the decimal point might be ‘,’ or some other characters, this leads to the incorrect convert from a string to a double value. E.g. “1.5e+11” will be converted to 1.0 in German locale.
So the fix is quite straight forward, get the current locale and the decimal point from the system API localeconv, and set the decimal point into the string which will be converted to a double value.