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() ) {