• .Net Core 迁移之坑二 《ToString("F") 输出与windows不一致问题》


    大家都知道 ToString("F") 是干什么的

    这里我还是介绍一下

    格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的有效位数或小数位数,具体如下:

    格式说明符

    说明 示例 输出
    C 货币 2.5.ToString("C") ¥2.50
    D 十进制数 25.ToString("D5") 00025
    E 科学型 25000.ToString("E") 2.500000E+005
    F 固定点 25.ToString("F2") 25.00
    G 常规 2.5.ToString("G") 2.5
    N 数字 2500000.ToString("N") 2,500,000.00
    X 十六进制 255.ToString("X") FF

    F 这种固定点,应该大家很常用

    其实在winserver 上面也不会出现这种事情,主要是最近迁移到 .net core,改完发布上测试环境,一切是多么的美好

    就在我慢悠悠的看博客园的时候,测试来找我了,说PayPal支付失败.我当时就懵了,我自测过的啊,而且又在本地上面执行了一次,你看好好的,是不是测试环境有问题。测试就找运维去了

    ps:我甩锅的水平不错吧 ( ̄▽ ̄)~*

     结果不知道有多久,运维的兄弟过来了:兄弟,我环境初始化了好多次,都是开源的,我啥都没干啊,你能不能看看日志啊,看这运维兄弟那苦巴巴的眼神,好吧

    我看了下PayPal的日志

    {"name":"VALIDATION_ERROR","details":[{"field":"transactions.amount","issue":"Currency amount must be non-negative number, may optionally contain exactly 2 decimal places separated by '.', optional thousands separator ',', limited to 7 digits before the decimal point and currency which is a valid ISO Currency Code"}],"message":"Invalid request - see details","information_link":"https://developer.paypal.com/docs/api/payments/#errors","debug_id":"eecc8c8017432"}

    Currency amount must be non-negative number, may optionally contain exactly 2 decimal places separated by。啥?金额必须是2个小数位,我是两个小数位啊

    不信你看

    这时候路过的大牛说了一句,你把 ToString("F2") 放linux上运行下看看

    听了之后马上开搞 结果如下

    还真是3个小数。后来就查了下msdn的文档,咨询了大牛,发现是文化差异导致的。解决方案就是无视文化差异

    ToString("F") 的时候加上CultureInfo.InvariantCulture 属性就可以了,下图是 这个属性的意思 

    好了,下班了。手工回家

  • 相关阅读:
    实现翻页效果
    使用AHKActionSheet
    [翻译] GSProgressView
    [翻译] NSRegexTester
    下载时获取文件大小
    高级mask应用
    使用UILabel实现滚动字幕移动效果
    动画绘制水波纹
    能产生粒子效果的CAEmitterLayer
    使用UITableView实现图片视差效果
  • 原文地址:https://www.cnblogs.com/zhaozhengyan/p/ToString_InvariantCulture_onlinux.html
Copyright © 2020-2023  润新知