Skip to content

Scale depends on computing order of additions when subsequent result is zero #695

@35VLG84

Description

@35VLG84

Hello,

Decimal's scale depends on computing order of additions, if additions subsequent result is zero:

#[test]
fn test_scale_with_add() {
    let d3 = dec!(3.001);
    let d2 = dec!(2.01);

    let d_332 = -d3 + d3 + d2;
    let d_323 = -d3 + d2 + d3;
    assert_eq!(d_323, d_332);
    assert_eq!(d_323.scale(), 3);

    // This assert fails:
    assert_eq!(d_323.scale(), // scale = 3
               d_332.scale()); // scale = 2
}

And one test to check that scale is preserved in normal case:

#[test]
fn test_preserve_scale() {
    let d9 = dec!(9.000000000);
    let d3 = dec!(3.000);

    assert_eq!(d9.scale(), 9);
    assert_eq!(d3.scale(), 3);

    let d = d9 + d3;
    assert_eq!(d.scale(), 9);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions