guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 04/07: i18n: Do not represent zero as "-0".


From: Ludovic Courtès
Subject: [Guile-commits] 04/07: i18n: Do not represent zero as "-0".
Date: Sun, 12 Feb 2017 18:20:49 -0500 (EST)

civodul pushed a commit to branch stable-2.0
in repository guile.

commit 68938bcadd3920ae5406877a91fca5be0f42f3ee
Author: Ludovic Courtès <address@hidden>
Date:   Sun Feb 12 22:59:17 2017 +0100

    i18n: Do not represent zero as "-0".
    
    Partly fixes <http://bugs.gnu.org/24990>.
    Reported by Martin Michel <address@hidden>.
    
    * module/ice-9/i18n.scm (monetary-amount->locale-string): Don't negate
    AMOUNT when it's zero.
    (number->locale-string): Likewise.
    * test-suite/tests/i18n.test ("number->locale-string")["positive inexact
    zero, 1 digit"]: New test.
    ("monetary-amount->locale-string")["positive inexact zero"]: New test.
---
 module/ice-9/i18n.scm      |  7 ++++---
 test-suite/tests/i18n.test | 17 ++++++++++++++---
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/module/ice-9/i18n.scm b/module/ice-9/i18n.scm
index 1d12dd0..1326a2a 100644
--- a/module/ice-9/i18n.scm
+++ b/module/ice-9/i18n.scm
@@ -1,6 +1,7 @@
 ;;;; i18n.scm --- internationalization support    -*- coding: utf-8 -*-
 
-;;;;   Copyright (C) 2006, 2007, 2009, 2010, 2012 Free Software Foundation, 
Inc.
+;;;;   Copyright (C) 2006, 2007, 2009, 2010, 2012,
+;;;;      2017 Free Software Foundation, Inc.
 ;;;;
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
@@ -335,7 +336,7 @@ locale is used."
                                    (substring dec 0 fraction-digits)
                                    dec)))))
 
-         (external-repr (number->string (if (> amount 0) amount (- amount))))
+         (external-repr (number->string (if (>= amount 0) amount (- amount))))
          (int+dec   (string-split external-repr #\.))
          (int       (car int+dec))
          (dec       (decimal-part (if (null? (cdr int+dec))
@@ -387,7 +388,7 @@ number of fractional digits to be displayed."
                                    (substring dec 0 fraction-digits)
                                    dec))))))
 
-    (let* ((external-repr (number->string (if (> number 0)
+    (let* ((external-repr (number->string (if (>= number 0)
                                               number
                                               (- number))))
            (int+dec   (string-split external-repr #\.))
diff --git a/test-suite/tests/i18n.test b/test-suite/tests/i18n.test
index 0078baa..53ed932 100644
--- a/test-suite/tests/i18n.test
+++ b/test-suite/tests/i18n.test
@@ -1,7 +1,7 @@
 ;;;; i18n.test --- Exercise the i18n API.  -*- coding: utf-8; mode: scheme; -*-
 ;;;;
 ;;;; Copyright (C) 2006, 2007, 2009, 2010, 2011, 2012,
-;;;;   2013, 2014, 2015, 2016 Free Software Foundation, Inc.
+;;;;   2013, 2014, 2015, 2016, 2017 Free Software Foundation, Inc.
 ;;;; Ludovic Courtès
 ;;;;
 ;;;; This library is free software; you can redistribute it and/or
@@ -506,7 +506,10 @@
       (string=? "1234.567" (number->locale-string 1234.567)))
 
     (pass-if "fraction, 1 digit"
-      (string=? "1234.5" (number->locale-string 1234.567 1))))
+      (string=? "1234.5" (number->locale-string 1234.567 1)))
+
+    (pass-if "positive inexact zero, 1 digit"
+      (string=? "0.0" (number->locale-string .0 1))))
 
   (with-test-prefix "French"
 
@@ -572,4 +575,12 @@
        (lambda ()
          (let ((fr (make-locale LC_ALL %french-locale-name)))
            (string=? "1 234,56 EUR "
-                     (monetary-amount->locale-string 1234.567 #t fr))))))))
+                     (monetary-amount->locale-string 1234.567 #t
+                                                     fr))))))
+
+    (pass-if "positive inexact zero"
+      (under-french-locale-or-unresolved
+       (lambda ()
+         (let ((fr (make-locale LC_ALL %french-locale-name)))
+           (string=? "0,0 +EUR"
+                     (monetary-amount->locale-string 0. #f fr))))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]