当前位置:  开发笔记 > 编程语言 > 正文

使用浏览器,我如何知道操作系统使用哪个小数分隔符?

如何解决《使用浏览器,我如何知道操作系统使用哪个小数分隔符?》经验,为你挑选了6个好方法。

我正在开发一个Web应用程序.

我需要正确显示一些十进制数据,以便可以将其复制并粘贴到GUI不受我控制的某个应用程序中.

GUI应用程序是区域设置敏感的,它只接受在系统中设置的正确的小数分隔符.

我可以猜测小数分隔符Accept-Language和猜测在95%的情况下是正确的,但有时它会失败.

有没有办法在服务器端(最好是我可以收集统计数据),或在客户端?

更新:

任务的重点是自动完成.

事实上,这个webapp是一种传统GUI的在线界面,有助于正确填写表单.

使用它的用户大多不知道小数分隔符是什么.

Accept-Language解决方案的实施和工作,但我想改善它.

UPDATE2:

我需要检索一个非常具体的设置:小数分隔符设置Control Panel / Regional and Language Options / Regional Options / Customize.

我处理四种操作系统:

    俄语Windows用逗号作为DS(80%).

    英文版Windows,期间为DS(15%).

    俄罗斯Windows用一段时间作为DS来制作写得不好的英文应用程序(4%).

    使用逗号作为DS的英文Windows可以使写得不好的俄语应用程序正常工作(1%).

所有100%的客户都在俄罗斯,遗留申请涉及俄罗斯政府发布的表格,因此要求一个国家将收取100%的俄罗斯联邦,GeoIP将收益80%的俄罗斯联邦和20%的其他(不正确)答案.



1> Chris Nielse..:

这是一个简单的JavaScript函数,它将返回此信息.在Firefox,IE6和IE7中测试过.我必须在每次更改控制面板/区域和语言选项/区域选项/自定义下的设置之间关闭并重新启动浏览器.然而,它不仅包括逗号和句号,还包括古怪的自定义内容,如字母"a".

function whatDecimalSeparator() {
    var n = 1.1;
    n = n.toLocaleString().substring(1, 2);
    return n;
}

function whatDecimalSeparator() {
    var n = 1.1;
    n = n.toLocaleString().substring(1, 2);
    return n;
}

console.log('You use "' + whatDecimalSeparator() + '" as Decimal seprator');


2> laalto..:

询问用户,不要猜.在您的Web应用程序中设置它.

编辑添加:

我认为可以猜测默认设置是否正常,比如95%的时间.我的意思是用户应该仍然能够覆盖软件所做的任何猜测.当软件试图太聪明并且不允许纠正时,我已经沮丧太多次了.


@Iaalto:这将引起一个几乎与“最小化数据库大小(推荐)或最大化搜索功能?”之类的问题。

3> JBE..:

可以使用检索当前或给定语言环境的分隔符Intl.NumberFormat#formatToParts.

function getDecimalSeparator(locale) {
    const numberWithDecimalSeparator = 1.1;
    return Intl.NumberFormat(locale)
        .formatToParts(numberWithDecimalSeparator)
        .find(part => part.type === 'decimal')
        .value;
}

它仅适用于支持Intl API的浏览器.否则它需要Intl polyfill

例子:

> getDecimalSeparator()
"."
> getDecimalSeparator('fr-FR')
","

奖金:

我们可以扩展它以检索给定语言环境的小数分隔符:

function getSeparator(locale, separatorType) {
        const numberWithGroupAndDecimalSeparator = 1000.1;
        return Intl.NumberFormat(locale)
            .formatToParts(numberWithGroupAndDecimalSeparator)
            .find(part => part.type === separatorType)
            .value;
    }

例子:

> getSeparator('en-US', 'decimal')
"."
> getSeparator('en-US', 'group')
","
> getSeparator('fr-FR', 'decimal')
","
> getSeparator('fr-FR', 'group')
" "



4> 小智..:
function getDecimalSeparator() {
    //fallback  
       var decSep = ".";

        try {
            // this works in FF, Chrome, IE, Safari and Opera
            var sep = parseFloat(3/2).toLocaleString().substring(1,2);
            if (sep === '.' || sep === ',') {
                decSep = sep;
            }
        } catch(e){}

        return decSep;
    }


它与接受的答案有何不同?

5> 小智..:

为什么不

0.1.toLocaleString().replace(/\d/g, '')


6> Michael Borg..:

我可以从Accept-Language中猜出小数分隔符,并且在95%的情况下猜测是正确的,但有时它会失败.

这是IMO最好的行动方案.为了处理故障,请添加一个链接以在显示区域旁边手动设置.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有