From 98d612f2a47efcbb7f09a266293319879ea3add2 Mon Sep 17 00:00:00 2001 From: jef Date: Fri, 15 Apr 2011 13:45:21 +0000 Subject: [PATCH] fix #3606 git-svn-id: http://svn.osgeo.org/qgis/trunk@15706 c8812cc2-4d05-0410-92ff-de0c093fc19c --- src/app/qgsfieldcalculator.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/app/qgsfieldcalculator.cpp b/src/app/qgsfieldcalculator.cpp index d4d6c444f12c..3506a9979bb5 100644 --- a/src/app/qgsfieldcalculator.cpp +++ b/src/app/qgsfieldcalculator.cpp @@ -18,6 +18,7 @@ #include "qgssearchstring.h" #include "qgsvectordataprovider.h" #include "qgsvectorlayer.h" + #include QgsFieldCalculator::QgsFieldCalculator( QgsVectorLayer* vl ) @@ -192,7 +193,24 @@ void QgsFieldCalculator::accept() } else if ( value.isNumeric() ) { - mVectorLayer->changeAttributeValue( feature.id(), mAttributeId, value.number(), false ); + const QgsField &f = mVectorLayer->pendingFields()[ mAttributeId ]; + QVariant v; + + if ( f.type() == QVariant::Double && f.precision() > 0 ) + { + v = QString::number( value.number(), 'g', f.precision() ); + } + else if ( f.type() == QVariant::Double && f.precision() > 0 && f.precision() == 0 ) + { + v = QString::number( qRound( value.number() ) ); + } + else + { + v = value.number(); + } + + v.convert( f.type() ); + mVectorLayer->changeAttributeValue( feature.id(), mAttributeId, v, false ); } else if ( value.isNull() ) {