我正在使用 d3-format 的format函式來舍入一些數字(是的,我知道這不是必需的)。
當我格式化負數時,我得到一個負數字串,正如預期的那樣。 但是,當我使用速記將其轉換回數字時,它會回傳NaN. 這不是應該發生的事情。我應該得到一個常規的負數。
import {format} from "d3-format"; //version 3.1.0
let numberFormatter = d3.format(".3f");
let neg = -2.333;
let negString = "-2.333";
let d3negString = numberFormatter(neg);
//the strings look the same
console.log(d3negString) // "-2.333"
console.log(negString) // "-2.333"
//both strings have the same type of 'string'
console.log(typeof negString === typeof d3negString); // true
//but they are not equal
console.log(negString === d3negString); // false
//normal strings work as expected
console.log(isNaN( negString)); // false
//but strings from d3-format function returns NaN
console.log(isNaN( d3negString)); // true
它說兩個字串具有相同型別的“字串”,但是它們的值不相等?即使文本是平等的?
d3 格式的數字字串的真正型別是什么?它們不能只是普通的字串,對吧?為什么它回傳NaN?這是一個錯誤嗎?
MacOS Big Sur
Chrome 96.0.4664.110
d3-format@3.1.0
uj5u.com熱心網友回復:
d3 的更改日志顯示在2.0.0 版本中進行了以下更改:
將默認減號更改為減號 (-) 而不是連字符減號 (-)。
在D3 的 github 上的這個執行緒中有一些有趣的評論:
D3 最初確實使用了減號,但人們也抱怨這一點(例如,#595),主要是因為人們期望 d3.format 會使用與 JavaScript 相同的符號
number.toString。因此,在2.10.0 ( da3131c , #756 )中,減號被替換為連字符減號。
和:
現在可以通過指定語言環境的
minus屬性來選擇加入。我正在考慮在下一個主要版本中(再次)將減號設為默認值。
uj5u.com熱心網友回復:
這不起作用的原因是,盡管看起來相同,但“減號”字符是不同的 unicode 符號。
幸運的是,d3 提供了一種將默認減號更改為您使用該函式選擇的任何字符的formatLocale方法。]
'HYPHEN-MINUS' U 002D Unicode 字符被識別為“負號”。
// import {format} from 'd3-format' //do not directly import format with default settings
import { formatLocale} from "d3-format"
const format = formatLocale({ minus: "\u002D"}).format
let numberFormatter = d3.format(".3f");
let neg = -2.333;
let negString = "-2.333";
let d3negString = numberFormatter(neg);
console.log(d3negString) // "-2.333"
console.log(negString) // "-2.333"
console.log(typeof negString === typeof d3negString); // true
console.log(negString === d3negString); // true
console.log(isNaN( negString)); // false
console.log(isNaN( d3negString)); // false
這個故事的更大寓意是 d3-format 的目標不是對數字進行四舍五入——它是讓數字看起來像 text一樣漂亮。為防止出現問題,請在 javascript 中使用Math.round()或對數字進行舍入。"-2.3333".toFixed(3) // => -2.333
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416242.html
標籤:
