Learn R Programming

guideR (version 0.4.0)

round_preserve_sum: Round values while preserve their rounded sum in R

Description

Sometimes, the sum of rounded numbers (e.g., using base::round()) is not the same as their rounded sum.

Usage

round_preserve_sum(x, digits = 0)

Value

A numerical vector of same length as x.

Arguments

x

Numerical vector to sum.

digits

Number of decimals for rounding.

Details

This solution applies the following algorithm

  • Round down to the specified number of decimal places

  • Order numbers by their remainder values

  • Increment the specified decimal place of values with k largest remainders, where k is the number of values that must be incremented to preserve their rounded sum

Examples

Run this code
sum(c(0.333, 0.333, 0.334))
round(c(0.333, 0.333, 0.334), 2)
sum(round(c(0.333, 0.333, 0.334), 2))
round_preserve_sum(c(0.333, 0.333, 0.334), 2)
sum(round_preserve_sum(c(0.333, 0.333, 0.334), 2))

Run the code above in your browser using DataLab