@@ -40,7 +40,8 @@ private enum DataTypeFlags
40
40
Number = 0x8 ,
41
41
DateTime = 0x10 ,
42
42
Boolean = 0x20 ,
43
- Error = 0x30
43
+ Error = 0x30 ,
44
+ Float = 0x40 ,
44
45
}
45
46
internal PivotTableCacheInternal _cache ;
46
47
internal ExcelPivotTableCacheField ( XmlNamespaceManager nsm , XmlNode topNode , PivotTableCacheInternal cache , int index ) : base ( nsm , topNode )
@@ -131,7 +132,10 @@ internal void WriteSharedItems(XmlElement fieldNode, XmlNamespaceManager nsm)
131
132
var noTypes = GetNoOfTypes ( flags ) ;
132
133
if ( noTypes > 1 &&
133
134
flags != ( DataTypeFlags . Int | DataTypeFlags . Number ) &&
134
- flags != ( DataTypeFlags . Int | DataTypeFlags . Number | DataTypeFlags . Empty ) &&
135
+ flags != ( DataTypeFlags . Float | DataTypeFlags . Number ) &&
136
+ flags != ( DataTypeFlags . Int | DataTypeFlags . Number | DataTypeFlags . Float ) &&
137
+ flags != ( DataTypeFlags . Int | DataTypeFlags . Number | DataTypeFlags . Empty ) &&
138
+ flags != ( DataTypeFlags . Int | DataTypeFlags . Number | DataTypeFlags . Float | DataTypeFlags . Empty ) &&
135
139
SharedItems . Count > 1 )
136
140
{
137
141
if ( ( flags & DataTypeFlags . String ) == DataTypeFlags . String ||
@@ -255,7 +259,8 @@ private void SetFlags(XmlElement shNode, DataTypeFlags flags)
255
259
{
256
260
shNode . SetAttribute ( "containsNumber" , "1" ) ;
257
261
}
258
- if ( ( flags & DataTypeFlags . Int ) == DataTypeFlags . Int )
262
+ if ( ( flags & DataTypeFlags . Int ) == DataTypeFlags . Int &&
263
+ ( flags & DataTypeFlags . Float ) != DataTypeFlags . Float )
259
264
{
260
265
shNode . SetAttribute ( "containsInteger" , "1" ) ;
261
266
}
@@ -403,11 +408,15 @@ private DataTypeFlags GetFlags()
403
408
case TypeCode . Double :
404
409
case TypeCode . Single :
405
410
flags |= ( DataTypeFlags . Number ) ;
406
- if ( ( flags & DataTypeFlags . Int ) != DataTypeFlags . Int && ( Convert . ToDouble ( si ) % 1 == 0 ) )
411
+ if ( ( flags & DataTypeFlags . Int ) != DataTypeFlags . Int && ( Convert . ToDouble ( si ) % 1 == 0 ) )
407
412
{
408
413
flags |= DataTypeFlags . Int ;
409
414
}
410
- break ;
415
+ else if ( ( flags & DataTypeFlags . Float ) != DataTypeFlags . Float && ( Convert . ToDouble ( si ) % 1 != 0 ) )
416
+ {
417
+ flags |= DataTypeFlags . Float ;
418
+ }
419
+ break ;
411
420
case TypeCode . DateTime :
412
421
flags |= DataTypeFlags . DateTime ;
413
422
break ;
0 commit comments