Fix issue when serializing float/double with exponents

This commit is contained in:
Alexandre Mutel 2015-09-18 10:15:35 +09:00
Родитель c19f967a74
Коммит 89187f383e
2 изменённых файлов: 35 добавлений и 8 удалений

Просмотреть файл

@ -47,6 +47,7 @@ using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Security.Policy;
using NUnit.Framework;
using SharpYaml.Serialization;
using SharpYaml.Serialization.Serializers;
@ -207,7 +208,7 @@ Value: World!
public float Float { get; set; }
public double Double { get; set; }
public double Double { get; set; }
public MyEnum Enum { get; set; }
@ -257,7 +258,31 @@ UInt64: 8
SerialRoundTrip(settings, text);
}
public class MyObjectAndCollection
public class ObjectFloatDoublePrecision
{
public float Float { get; set; }
public double Double { get; set; }
}
[Test]
public void TestFloatDoublePrecision()
{
var settings = new SerializerSettings() { LimitPrimitiveFlowSequence = 20 };
settings.RegisterTagMapping("ObjectFloatDoublePrecision", typeof(ObjectFloatDoublePrecision));
var text = @"!ObjectFloatDoublePrecision
Float: 1E-05
Double: 1E-05
".Trim();
SerialRoundTrip(settings, text);
}
public class MyObjectAndCollection
{
public MyObjectAndCollection()
{

Просмотреть файл

@ -168,14 +168,16 @@ namespace SharpYaml.Serialization.Serializers
/// <returns></returns>
private string AppendDecimalPoint(string text )
{
if (text.Contains("."))
for (int i = 0; i < text.Length; i++)
{
return text;
}
else
{
return text + ".0";
var c = text[i];
if (c == 'e' || c == 'E' || c == '.')
{
return text;
}
}
return text + ".0";
}
public override string ConvertTo(ref ObjectContext objectContext)